我是整个 JS/Mongo 的新手,并试图在这里找到最好的方法。
基本上我有一组项目,我想将其中的一部分锁定给特定用户。所以一步一步
- 找到 X 个解锁物品 (
lock=''
) - 设置字段
lock='user.name'
- 向用户显示项目
好的,这里可能会有一些竞争条件问题,但暂时,我们不要担心。主要问题是一旦完成,用户 2 应该无法找到/锁定相同的项目。
在 Mongoose 文档中,我发现findOneAndUpdate似乎完全符合我的要求,除了它只处理一项。
这里有哪些选择?
我是整个 JS/Mongo 的新手,并试图在这里找到最好的方法。
基本上我有一组项目,我想将其中的一部分锁定给特定用户。所以一步一步
lock=''
)lock='user.name'
好的,这里可能会有一些竞争条件问题,但暂时,我们不要担心。主要问题是一旦完成,用户 2 应该无法找到/锁定相同的项目。
在 Mongoose 文档中,我发现findOneAndUpdate似乎完全符合我的要求,除了它只处理一项。
这里有哪些选择?
有 updateMany,看看mongoose docs和mongo docs。
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
如果您正在搜索的 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);
}