Mongo 只在文档总数小于 N

问题描述 投票:0回答:1

只有当我的查询返回的总计数小于某个阈值数 N 时,我才想将文档插入 mongo。这种查询在 mongodb 中是否可能,或者我应该切换到可以用 case 和查询中的约束条件。

我正在寻找一种解决方案,在这种情况下,这种插入会在大规模和并发的情况下发生,并且仍然不应超过插入阈值。

我可以在关系数据库中找到这种解决方案,还用 SP(存储过程)做了一个 POC,看看是否可以处理。

提前致谢。

mongodb concurrency mongodb-query aggregation-framework
1个回答
0
投票

可以使用聚合管道来完成。例如:

  1. 您的查询示例(可以是您需要多少步)
  2. $group
    全部统计结果文档并创建一个文档
  3. 仅当计数小于 N
  4. 时才保留文档
  5. 替换成你要插入的文档
  6. 格式化
  7. 插入集合(不满足条件则不插入)
db.collection.aggregate([
  {$match: {your query}},
  {$group: {_id: 0, count: {$sum: 1}}}, 
  {$match: {count: {$lt: N}}},
  {$project: {_id: 0, doc: newDoc}},
  {$replaceRoot: {newRoot: "$doc"}},
  {$merge: {into: "collection"}}
])

游乐场示例中查看它是如何工作的

© www.soinside.com 2019 - 2024. All rights reserved.