ChatGPT解决这个技术问题 Extra ChatGPT

MongoDB:更新一个字段上的每个文档

我假设有一个名为 foo 的集合。

foo 的每个实例都有一个名为 lastLookedAt 的字段,它是自纪元以来的 UNIX 时间戳。我希望能够通过 MongoDB 客户端并将所有现有文档(大约 20,000 个)的时间戳设置为当前时间戳。

处理这个问题的最佳方法是什么?


S
Sled

无论版本如何,对于您的示例,<update> 是:

{  $set: { lastLookedAt: Date.now() / 1000 }  }

但是,根据您的 MongoDB 版本,查询看起来会有所不同。无论版本如何,关键是空条件 {} 将匹配任何文档。在 Mongo shell 或任何 MongoDB 客户端中:

$version >= 3.2

db.foo.updateMany( {}, <update> )

{} 是条件(空条件匹配任何文档)

3.2 > $version >= 2.2

db.foo.update( {}, <update>, { multi: true } )

{} 是条件(空条件匹配任何文档)

{multi: true} 是“更新多个文档”选项

$version < 2.2

db.foo.update( {}, <update>, false, true )

{} 是条件(空条件匹配任何文档)

false 用于“upsert”参数

true 用于“multi”参数(更新多条记录)


Date.now() 也返回一个时间戳。请参阅developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
对于所有这些 foo 实例,它仍然给了我一个不合适的日期。运行后我做了一个 db.foo.findOne() 和 lastLookedAt 是:1327691719186,它转换为 jruby-1.6.5 :011 > Time.at(1327691719186) => Sun Nov 16 02:19:46 -0500 44042
我不好,POSIX 时间使用秒,而 Javascript 时间使用毫秒。不过 Date.now() / 1000 应该可以工作。您可能需要将其四舍五入。
psh 是那个空的 {} 为我做的,谢谢 Phil
如何为 oldvalue+"some string" 做
J
Jitendra

此代码将对您有所帮助

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "abc@gmail.com",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  

u
user1163459

我已经使用 MongoDB .NET 驱动程序一个多月了。如果我要使用 .NET 驱动程序来完成,我会在集合对象上使用 Update 方法。首先,我将构建一个查询,它将获取我感兴趣的所有文档,并对我想要更改的字段进行更新。 Mongo 中的更新仅影响第一个文档,并且要更新查询产生的所有文档,需要使用“Multi”更新标志。示例代码如下...

var collection = db.GetCollection("Foo");
var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs.
var update = Update.Set("timestamp", datetime.UtcNow);
collection.Update(query, update, UpdateFlags.Multi);

H
Harsh Patel

您可以使用 mongodb 的 updateMany() 方法更新多个文档

简单查询是这样的

db.collection.updateMany(filter, update, options)

有关 updateMany 的更多文档,请阅读 here

根据您的要求,更新代码将如下所示:

User.updateMany({"created": false}, {"$set":{"created": true}});

在这里您需要使用 $set,因为您只想将 created 从 true 更改为 false。对于参考。如果要更改整个文档,则无需使用 $set