我有一个带有 likes 数组的用户集合。我需要更新所有赞 为每个用户。
我写了一个脚本来做到这一点,但它很疯狂。 我需要更新数以千万计的用户。
db.users.find().forEach( function(user) {
users.likes.forEach( function(like){
like.stars = 5;
});
db.users.save(user);
});
你知道更快的方法吗?
编辑:
示例文档如下所示:
{
"_id" : ObjectId("4f0f31ab0c20020600012301"),
"created_at" : ISODate("2012-01-12T19:16:59.748Z"),
"predictions" : null,
"likes" : [
{
"_id" : ObjectId("4f0f4a3978c7890600020f2b"),
"brand_id" : "bcbgmaxazria"
}
],
"updated_at" : ISODate("2012-12-19T10:09:20.000Z")
}
我想为喜欢的集合中的所有对象添加值为5的新 stars 字段。
答案 0 :(得分:0)
这是一个普遍的问题。有关详细信息,请参阅https://stackoverflow.com/a/4669702/1296707 - 并且不要忘记荣誉! ;)
但是,您可以使用批量操作更快地完成它。
var bulk = db.users.initializeUnorderedBulkOp()
db.users.find().forEach(
function(user){
user.likes.forEach(
function(like){ like.stars = 5; }
);
bulk.find({_id:user._id}).replaceOne(user)
});
bulk.execute();
这是在mongo shell中,应该可以工作。它也应该更快。