【问题标题】:How to update same field of all documents in collection in mongoose [duplicate]如何在猫鼬中更新集合中所有文档的相同字段[重复]
【发布时间】:2017-11-27 11:54:14
【问题描述】:

我有这个系列(不完全是我所拥有的,只是举例)。我想将所有“numberOfViewsPerWeek”字段更新为 0,就像重置一样。

{
    "_id" : ObjectId("594d2359bf170b0828690bf7"),
    "owner" : ObjectId("594c126285f0922a985083c1"),
    "numberOfViewsSincePost" : 15,
    "numberOfViewsPerWeek" : 4,
}

{
    "_id" : ObjectId("594d709addb8691cf067fa73"),
    "owner" : ObjectId("594c126285f0922a985083c1"),
    "numberOfViewsSincePost" : 10,
    "numberOfViewsPerWeek" : 2,
}

{
    "_id" : ObjectId("764d709addb8691cf067fa70"),
    "owner" : ObjectId("594c126285f0922a985083c1"),
    "numberOfViewsSincePost" : 12,
    "numberOfViewsPerWeek" : 7,
}
...

我会尝试使用更新,但它只更新第一个文档,我的代码是这样的

Property.update({}, {'$set': {'numberOfViewsPerWeek' : 0}}, function(error, properties){

        if(error){
            console.log(error);
        }

        if(!properties){
            console.log('Something went wrong');
        }

        console.log('success update view');
    });

我该怎么办?提前致谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我实际上认为很多人对此有疑问。
    您应该包含一个名为 multi: true 的选项。

    例如:

    Property.update({}, {'$set': {'numberOfViewsPerWeek' : 0}}, {multi: true},
       function(error, properties){/* ... rest of the code*/
    

    Docs:

    默认情况下,update() 方法更新单个文档。设置 多参数更新所有符合查询条件的文档。

    我不知道他们为什么这样做,我觉得这很不直观。
    在我看来,更新所有文档应该是默认的。

    对 mongo >= 3.2 的更新:要解决混淆,最好使用 .updateOne.updateMany 自动设置 multi 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2020-02-01
      • 2017-02-10
      • 2022-10-24
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多