MongoDB 合并查询作为聚合管道

时间:2021-02-24 15:31:18

标签: mongodb mongodb-query

我有两个独立的查询。

  1. 第一个是查找已删除的项目。

  2. 第二个是通过itemId检查是否所有物品都在同一国家被删除。

我可以将其合并为管道吗?

示例输入:

itemId      removed     country
1           true        US
1           false       TR
2           true        US
2           true        RU

示例输出:

itemId: 2

预期:(itemId: 2) 按 itemId 查找从所有国家/地区删除的 itemId。

我的代码如下:

db.collection.find({removed: true}, {itemId: 1}) -> Extract itemIdList

forEach id: itemIdList: [1, 2]
  if db.collection.find({removed: false, itemId: id}).count() > 0
     remove itemId from itemIdList
return remainingItems: [2];

1 个答案:

答案 0 :(得分:1)

您好,您可以通过按项目 ID 聚合第一组项目并计算移除的总数 true 和总项目来实现此目的。现在处于 $match 阶段,如果项目总数等于删除的真实计数,这意味着,此 itemId 对所有国家/地区都有 removed true,只需将 itemIds 推入大批。 Working solution

db.collection.aggregate([
    {
        "$group": {
            "_id": "$itemId",
            "itemsArrCount": {
                "$sum": 1
            },
            "totalRemovedTrue": {
                "$sum": {
                    "$cond": [
                        { "$eq": ["$removed", true] },
                        1,
                        0
                    ]
                }
            },        
        }
    },
    {
        "$match": {
            "$expr": {
                "$eq": [ "$itemsArrCount", "$totalRemovedTrue"]
            }
        }
    },
    {
        "$group": {
            "_id": null,
            "itemIds": {
                "$push": "$_id"
            }
        }
    }
])