gpt4 book ai didi

mongodb - 即使使用 $addToSet,mongodb 中数组中的键重复项

转载 作者:可可西里 更新时间:2023-11-01 09:24:49 28 4
gpt4 key购买 nike

我有这样的模式模式

{
'cr':[
{ key: 'key1', value:['value1','value2','value3'] },
{ key: 'key2', value:['value4','value5','value6'] }
]
}

function addCriteriaKey(id,key,callback){
var options = { new: false ,select:'_id'};
Model.update({'uid':id},{'$addToSet':{'cr':{'key':key}}},options,function(err,data){
if(err) callback(err,null);
else callback(null,data);
})
}

function addCriterialValueToKey(id,key,value,callback){
var options = { new: false ,select:'_id'};
Model.update({'uid':id,'cr.key':key},{'$addToSet':{'cr.$.val':value}},options,function(err,data){
if(err) callback(err,null);
else callback(null,data);
})
}

所以这是我添加一个键和一个值的两种方法,它们都有效,但是数据库有一个现有的键,但我添加了一个额外的键,$addToSet 不再起作用。

例如当我这样做时:

1. addCriteriaKey('id','abc',function(err,data){})

2. addCriterialValueToKey('id','abc','111',function(err,data){})

数据变成这样

{
'cr':[
{ key: 'abc', value:['111'] }
]
}

但是当我再次添加 key “abc”时。1. addCriteriaKey('id','abc',function(err,data){})

数据变成这样

{
'cr':[
{ key: 'abc', value:['111'] },
{ key: 'abc' }
]
}

$addToSet 似乎不再起作用了,我应该怎么做才能防止这种情况发生?

最佳答案

$addToSet 只检查整个对象而不是特定值,所以在您的情况下

{ key: 'abc', value:['111'] } 
and
{ key: 'abc'}

两者对于 $addToSet 都是不同的

如果你想确保唯一键,那么你应该像这样为它创建一个唯一索引。

db.collection.ensureIndex( { 'cr.key': 1 }, { unique: true } );

关于mongodb - 即使使用 $addToSet,mongodb 中数组中的键重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446173/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com