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);
        })
    }
}

该方法的作用是将key添加到'cr'字段中,如果key是字符串,则直接添加,如果key是字符串数组,则使用'$each'命令将它们全部添加

添加字符串效果很好,添加到字符串数组时出现问题,我希望它可以一个一个添加,但结果不同 例如: addCriteriaKey('id',['111','222', '333'],函数(错误,数据){})

我的预期结果:

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

然而结果是:

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

我想知道这是什么问题?

4

1 回答 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);
        })
}
于 2013-10-18T11:23:22.287 回答