猫鼬:如何查找和更新许多

时间:2013-04-16 08:34:31

标签: node.js mongodb express mongoose

我是整个JS / Mongo的新手,并试图找到最好的方法。

基本上我有一组项目,我想将它们的一部分锁定到特定用户。所以一步一步

  1. 查找X个未锁定的项目(lock=''
  2. 设置字段lock='user.name'
  3. 向用户显示项目
  4. 好的,这里可能会出现一些竞争条件问题,但暂时不要担心。主要问题是,一旦完成,user2就无法找到/锁定相同的项目。

    在Mongoose文档中,我发现findOneAndUpdate似乎完全符合我的要求,除了它只处理一个项目。

    这里有什么选择?

2 个答案:

答案 0 :(得分:0)

有updateMany,请查看mongoose docsmongo docs

    db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

答案 1 :(得分:-3)

如果您搜索的api支持不可用,您可以试试这个。 首先列出与您的条件匹配的所有数据,然后在过滤后的数据上应用更新。

我举了一个例子:

     Query query= query.addCriteria(Criteria.where("page_id").is(new Long("1234")));    
     List<PageWidgetDetails> pageWidgetDetailsList = mongo.find(query,    PageWidgetDetails.class);

              for (PageWidgetDetails pageWidgetDetailsObj : pageWidgetDetailsList) {
                    String widget_id=pageWidgetDetailsObj.getWidgetId();
                    query=new Query(Criteria.where("widget_id").is(widget_id));
                      update=new Update();
                     update.set("widget_description", "blah blah ....");


                     mongo.upsert(query, update, PageWidgetDetails.class);

    }