【问题标题】:key duplicates in the array in mongodb even using $addToSet即使使用 $addToSet 在 mongodb 中的数组中的键重复
【发布时间】:2013-10-18 18:18:18
【问题描述】:

我有这样的架构 架构

{
    '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'] }              
         ]
}

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

数据变成这样

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

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

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

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

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

    对于 $addToSet 两者都不同

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

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

    【讨论】:

    • 谢谢,Shreyance,这很有帮助
    • @user824624 如果它解决了您的目的,您可以接受答案。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 2015-02-10
    • 1970-01-01
    • 2015-03-12
    • 2017-05-30
    • 2020-08-16
    • 2015-03-08
    相关资源
    最近更新 更多