Javascript 如何对阵列中的嵌入式文档执行可扩展的批量更新
我有一个用户集合和一个likes数组。我需要更新所有喜欢的东西 对于每个用户 我写了一个脚本来做这件事,但是速度太慢了。 我需要更新数千万用户Javascript 如何对阵列中的嵌入式文档执行可扩展的批量更新,javascript,performance,mongodb,Javascript,Performance,Mongodb,我有一个用户集合和一个likes数组。我需要更新所有喜欢的东西 对于每个用户 我写了一个脚本来做这件事,但是速度太慢了。 我需要更新数千万用户 db.users.find().forEach( function(user) { users.likes.forEach( function(like){ like.stars = 5; }); db.users.save(user); }); 你知道有什么更快的方法来实现这一点吗 编辑: 示例文档如下所示: { "
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")
}
我想向likes集合中的所有对象添加一个值为5的新stars字段。这是一个普遍问题。请查看详细信息-不要忘记荣誉 但是,使用批量操作可能会更快一些
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中,应该可以使用。它也应该更快。您能出示一份示例文档吗?如果我明白了,每个like数组条目都包含一个文档,其中一个字段名为stars?你想做的是将所有恒星的出现次数设置为5?