【问题标题】:mongoose: mongodb update with multi true not updating all the documentsmongoose:mongodb update with multi true 不更新所有文档
【发布时间】:2012-08-11 11:42:37
【问题描述】:

mongodb update with multi true 不会更新所有文档,而只是更新最初的 1 或 2 个文档。这是查询。是因为我使用的限制吗?无论如何,我删除了限制,它仍然没有更新匹配条件找到的所有 31 个文档。猫鼬更新语法有什么问题吗?

db.update({biztype:msg.biztype, 'g_location': {$near: [msg.lng, msg.lat], $maxDistance:10/111.12}},{
                        $push:{fromusers:{
                            ip: ip,
                            msg: msg.msg,
                            u_name: msg.name,
                            u_mobile: msg.mobile,
                            u_email: msg.email,
                            comment_date: new Date()
                        }}
                    }, false, true).
                    limit(10);

【问题讨论】:

  • 您的意思是当您使用该过滤器运行查询时会返回 31 个文档?哪些是正在更新的?
  • 这似乎在 shell 中而不是使用 Mongoose? db.update 是错字吗(缺少集合名称)?
  • @Asya,前 2 个文档正在更新中。有时只更新第一个。
  • @JohnnyHK,在将其发布到 SO 之前,我将模型名称更改为 db。实际上这是从我的 node.js 应用程序中获取的代码。好吧,而不是分贝。您可以将其更改为 someModel。

标签: node.js mongodb mongoose


【解决方案1】:

在了解db是Mongoose模型的情况下,您需要修改您的参数列表以与Mongoose update兼容:

db.update({biztype:msg.biztype, 'g_location': {$near: [msg.lng, msg.lat], $maxDistance:10/111.12}},
    {
        $push:{fromusers:{
            ip: ip,
            msg: msg.msg,
            u_name: msg.name,
            u_mobile: msg.mobile,
            u_email: msg.email,
            comment_date: new Date()
        }}
    },
    { multi: true }, // <== This boolean option goes into the options parameter
    function (err, numberAffected) {
        // Your callback, if needed
    }
);

【讨论】:

  • 这很棒。我不知道。很快就会尝试。
  • 如果我希望 upsert 是 true 和 multi false,我希望它是 { multi: false , upsert: true }
  • 谢谢@JohnnyHK,也为我工作,但是mongoose文档很奇怪,没有提到multi,至少我没找到。
  • @Ito multi 列在Model.update 文档的Valid options: 部分。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2011-12-07
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多