首页 文章

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

提问于
浏览
3

我有一系列像这样的mongoose查询

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

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

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

Account.update.apply(this, q);

我怎样才能做到这一点 ?如何将mongoose查询对象数组转换为mongoose参数?

I tried the following but it doesnt work.

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

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

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

    this 需要是 Model 实例,而不是全局范围上下文(或者在调用时可能出现的任何其他内容) .

  • 1

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

    var q = [
      { "_id": account._id },
      { "$addToSet": { "Campaigns": campaign._id } },
    ];
    
    Account.update( q[0], q[1], (q[2]) ? q[2] : {}, function(err, num) {
    

    从本质上讲,您将 always 作为参数传递查询,更新和选项文档 . 这使用三元条件将 empty {} 文档作为options参数放入,在动态条目中它不存在 .

相关问题