Javascript 如何对阵列中的嵌入式文档执行可扩展的批量更新

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); }); 你知道有什么更快的方法来实现这一点吗 编辑: 示例文档如下所示: { "

我有一个用户集合和一个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")
}

我想向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?