【问题标题】:Mongodb query.update method does not update arrayMongodb query.update 方法不更新数组
【发布时间】:2016-08-16 11:05:55
【问题描述】:

以前我曾尝试过类似的东西(使用猫鼬和承诺):

var cursor = User.find({email: from.address, token: tokenMatches[1]}); 然后

return cursor.update(
    {'votes.title': b},
    {'$set': { 'votes.$.category': a }}
).then(function (result) {
    if(result.nModified == 0) {
        return cursor.update({}, {'$push': { votes: { category: a, title: b }}}).then(function (res) {
            ServerLog('updatePush', res);
            return res;
        });
    }
});

但它总是在第一次和第二次调用时返回 nModified = 0。直到我发现游标对象实际上没有更新功能。那为什么会这样呢?为什么它没有抛出异常?

【问题讨论】:

    标签: mongodb mongoose promise


    【解决方案1】:

    Model.find 返回一个 Query 对象,而不是游标。 Query 确实有一个 update 方法可以让您将查询作为更新操作执行。

    【讨论】:

    • 好的,所以它实际上应该可以工作。让我困惑的是docs 将更新方法定义为:Query#update([criteria], [doc], [options], [callback]) 但有时在没有条件的情况下使用它并直接传递文档:Model.where({ _id: id }).update({ title: 'words' })
    • @velop 如果您未在 update 调用本身中提供它,则更新将使用已添加到 Query 的查询条件(例如,来自您示例中的 where 调用) .
    猜你喜欢
    • 2015-12-03
    • 2015-11-28
    • 1970-01-01
    • 2019-10-31
    • 2022-01-22
    • 1970-01-01
    • 2015-08-27
    • 2018-09-18
    • 2013-09-07
    相关资源
    最近更新 更多