将对象数组转换为mongoose查询?

时间:2014-03-16 01:35:40

标签: mongodb mongoose

我有一系列像这样的猫鼬查询

var q = [{"_id":'5324b341a3a9d30000ee310c'},{$addToSet:{"Campaigns":'532365acfc07f60000200ae9'}}]

我希望将它们应用于像这样的猫鼬方法

var q = [{"_id":'5324b341a3a9d30000ee310c'},{$addToSet:{"Campaigns":'532365acfc07f60000200ae9'}}]

Account.update.apply(this, q);

我该怎么做?如何将mongoose查询对象数组转换为mongoose参数?

我尝试了以下操作,但它不起作用。


    var q = [{
        "_id": '5324b341a3a9d30000ee310c'
    }, {
        $addToSet: {
            "Campaigns": '532365acfc07f60000200ae9'
        }
    }]

    Account.update(q).exec(function (e, r) {
        console.log(r)
        console.log('ERROR')
        console.log(e)
        console.log('ERROR')
        cb(e, r);
    });

2 个答案:

答案 0 :(得分:1)

您需要做的就是通过applyupdate方法传递正确的对象上下文:

Account.update.apply(Account, q)
    .exec(function(e, r) {
    // your code here ...
});

this需要是Model个实例,而不是全局范围上下文(或其他this可能在调用时的情况。)

答案 1 :(得分:0)

基本上似乎只是传递函数原型的方式。所以如果你想动态地构建你的参数,那么你需要做这样的事情:

var q = [
  { "_id": account._id },
  { "$addToSet": { "Campaigns": campaign._id } },
];

Account.update( q[0], q[1], (q[2]) ? q[2] : {}, function(err, num) {

基本上,您始终查询更新选项文档作为参数传递。这会使用三元条件将 {}文档作为选项参数放入其中,而在动态条目中它不存在。