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

3
我有一个 mongoose 查询数组,类似以下代码:
var q = [{"_id":'5324b341a3a9d30000ee310c'},{$addToSet:{"Campaigns":'532365acfc07f60000200ae9'}}]
我想要将它们应用到一个 mongoose 方法中,如下所示:
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); });

为什么不直接传递这两个参数呢? - WiredPrairie
因为我从函数的参数中获取数组。function(){var args = Array.prototype.slice.call(arguments, 0);} - user1566026
好的--我添加了答案,向您展示如何正确使用apply - WiredPrairie
2个回答

1
你只需要通过apply将正确的对象上下文传递给update方法即可:
Account.update.apply(Account, q)
    .exec(function(e, r) {
    // your code here ...
});

this必须是Model实例,而不是全局作用域上下文(或者在调用时它可能是其他什么)。


0

基本上似乎只是函数原型传递的方式。因此,如果您想动态构建参数,则需要像这样做:

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

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

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

是的,这似乎是最好的方法。谢谢! - user1566026
传递给apply的上下文是不正确的。请参见我的答案 - WiredPrairie
@WiredPrairie 当我测试过并且它能够正常工作时,它就不可能是错误的。也许你误读了回复。 - Neil Lunn
我指的是原问题中的this上下文,而不是你的回答。你的回答也可以。 - WiredPrairie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接