2

我的 mongodb 集合中有一些数据是这样的:

{"_id":{"$oid":"60603f0075ee1d1cdcd95d1a"},
"store_id":{"$oid":"60603dd675ee1d1cdcd95d18"},
"product_id":{"$oid":"6062f6973f24de12f0264013"}}

我想通过查询,我的查询是 store_id 的列表,如果列表的所有元素都存在于数据库中,则返回类似于 true 的内容,否则即使数据库中不匹配的元素之一也返回类似于 false 的内容...

我可以一一检查并使用 findOne ,但我不想一一检查!

更新:我可以通过 for 和 findOne 做到这一点,但我不想向 db 发送大量查询!

4

1 回答 1

0

我只能想出这个:传递 store_ids 的列表和 store_ids 的数量。按 store_id 过滤项目并计算那里有多少唯一的 store_id,然后将这个数字与您在查询中传递的 store_id 的数量进行比较。您可以使用聚合来表达这一点。

如果你使用聚合,你总是从 MongoDB 返回文档(对象):{'filedA': false},所以你不能只得到false1.

storeIds= [123, 1234, 12345];
numStoreIds = storeIds.length;

pipeline=
[{$match: {
  orderId: {$in: storeIds}
}}, {$group: {
  _id: "$storeId"
}}, {$count: 'num'}, {$project: {
  result: {
    $cond: [ { $eq: [ "$num", numStoreIds ] }, true, false]
  }
}}]

db.collection.aggregate(pipeline)

>
{ "result" : true }
于 2021-05-12T14:47:04.433 回答