首页 文章

在mongodb中添加一组键不起作用

提问于
浏览
0

我有这样的架构

{
    'cr':[
              { key: 'key1' },
              { key: 'key2' }
         ]
}


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

这个方法的作用是将键添加到'cr'字段中,如果键是一个字符串,直接添加它,如果键是一个字符串数组,那么通过起诉'$ each'命令将它们全部添加

添加字符串效果很好,添加到字符串数组时问题就会增加,我希望它可以逐个添加,但结果是不同的例如:addCriteriaKey('id',['111','222', '333'],功能(ERR,数据){})

我的预期结果:

{
    'cr':[
              { key: '111' }, { key: '222' }, { key: '333' }              
         ]
}

但结果是:

{
    'cr':[
              { key: {'$each':{'111','222','333'}} }           
         ]
}

我想知道这有什么问题?

1 回答

  • 0

    或者我们可以这样做,

    Model.addNotiCriteriaKey( 5, [{'key':'111'},{'key':'222'},{'key':'333'}], function(err,data){})
    

    或使用下划线将数组排序到键值数组中

    Model.addNotiCriteriaKey( 5, ['111','222','333'], function(err,data){})
        function(id,key,callback){
            _.map(key, function(element){ return {'key':element}; });
            UserModel.update({'uid':id},{'$pull':{'cr':{ '$each': key}}},options,function(err,data){
                if(err) callback(err,null);
                else callback(null,data);
            })
    }
    

相关问题