如何在mongodb中使用聚集查询?

时间:2018-07-19 05:29:50

标签: node.js mongodb

我的收藏集中有以下文件。需要使用汇总功能让所有员工进入商店。

//商店1

{
            "_id" : ObjectId("5b0d3fa6b426ea12ec0f6e5a"),
            "store_name": KFC
            "employees":[
                ObjectId("5b0d4c5ec47e6223a08af5fd"), //query id
                ObjectId("5b3b0ea9074f944699f1bcfc"), 
                ObjectId("5b11558d0a50c067a91875e9"), 
            ],..        },

//商店2

{
                "_id" : ObjectId("5b0d3fa6b426ea12ec0f6e5a"),
                "store_name": McDonalds
                "employees":[
                    ObjectId("5b0d4c5ec47e6223a08af5fd"),  
                    ObjectId("5b3b0ea9074f944699f1bcfc"), 
                    ObjectId("5b11558d0a50c067a91875e9"), 
                ],..  },

//商店3

{
        "_id" : ObjectId("5b0d3fa6b426ea12ec0f6e5a"),
            "store_name": Dominos
            "employees":[
                ObjectId("5b0d4c5ec47e6223a08af5fd"),   
                ObjectId("5b1623905bc92d76abfe0ab1"), 
                ObjectId("5b14e0b1fc1507569f830f7d") 
            ],..   }

使用聚合函数

    db.getCollection('stores').aggregate([
        {
            $match:{
                "employees":{ 
                    $in:[ ObjectId("5b0d4c5ec47e6223a08af5fd")]  //employee_id
                }
            }
        },{
            $unwind: "$employees"
        },{
            $group: {
                "_id": null,
                "emps": {           
                    $addToSet: "$employees" 
               }
            } 
        }
    ])

输出

{
    "_id" : null,
    "emps" : [ 
        ObjectId("5b0d4c5ec47e6223a08af5fd"),  // employee id
        ObjectId("5b3b0ea9074f944699f1bcfc"), 
        ObjectId("5b11558d0a50c067a91875e9"), 
        ObjectId("5b1623905bc92d76abfe0ab1"), 
        ObjectId("5b14e0b1fc1507569f830f7d")
    ]
}

很好。我需要在没有雇员查询ID的情况下获得此结果。我如何处理。

在这里,我该如何删除查询到的员工ID和需要得到类似结果的结果

{
    "_id" : null,
    "emps" : [ 
        ObjectId("5b3b0ea9074f944699f1bcfc"), 
        ObjectId("5b11558d0a50c067a91875e9"), 
        ObjectId("5b1623905bc92d76abfe0ab1"), 
        ObjectId("5b14e0b1fc1507569f830f7d")
    ]
}

1 个答案:

答案 0 :(得分:0)

您可以使用$filter并重复$in的{​​{1}}条件:

$not

$addFields用于替换现有的db.getCollection('stores').aggregate([ // your pipeline, { $addFields: { emps: { $filter: { input: "$emps", as: "emp", cond: { $not: { $in: [ "$$emp", [ ObjectId("5b0d4c5ec47e6223a08af5fd")] ] } } } } } } ]) 字段