MongoDB Query,只有在查找结果时才获取文档

时间:2017-12-23 20:11:04

标签: mongodb

我收集了各种活动和设备集合:

活动:

{
"_id" : ObjectId("5a3e9f2613e8867c1300002a"),
"AS_CloudsID" : 397,
"TerminalsID" : 1,
"TABLE_NAME" : "Products",
"ItemsID" : 43,
"UpdateNew" : 0,
"RepType" : 1
}
{
"_id" : ObjectId("5a3eafa813e886e407000029"),
"AS_CloudsID" : 377,
"TerminalsID" : 1,
"TABLE_NAME" : "Products",
"ItemsID" : 14812,
"UpdateNew" : 0,
"RepType" : 1
}

设备:

{
"_id" : ObjectId("5a3ea0999c1d80a468094d34"),
"DateCreated" : ISODate("2017-12-23T18:29:45.569Z"),
"cloudID" : 397,
"terminalID" : 1
}

当我执行此查询时:

db.getCollection('events').aggregate([
{
 $lookup:
   {
     from: "devices", 
       let: {
            cloudID: "$AS_CloudsID",
            terminalID: "$TerminalsID",
         },
         pipeline: [
            {
               $match: {
                  $expr: {
                     $and: [
                        {
                           $eq: [
                              "$terminalID",
                              "$$terminalID"
                           ]
                        },
                         {
                           $eq: [
                              "$cloudID",
                              "$$cloudID"
                           ]
                        }
                     ]
                  }
               }
            }
         ],
     as: "Devices"
     }
 }
 ])

我得到了很好的结果,但我只需要有设备的事件,所以我需要添加一些地方:Devices.length > 1我该怎么做?

现在我从空的数组设备中获取文件(来自事件收集)。

1 个答案:

答案 0 :(得分:0)

$ lookup之后使用$ match管道只能获取设备的事件。

db.getCollection('events').aggregate(
    [{
            $lookup: {
                from: "devices",
                let: {
                    cloudID: "$AS_CloudsID",
                    terminalID: "$TerminalsID",
                },
                pipeline: [{
                    $match: {
                        $expr: {
                            $and: [{
                                    $eq: [
                                        "$terminalID",
                                        "$$terminalID"
                                    ]
                                },
                                {
                                    $eq: [
                                        "$cloudID",
                                        "$$cloudID"
                                    ]
                                }
                            ]
                        }
                    }
                }],
                as: "Devices"
            }
        },
        {
            $match: {
               Devices: { $size: { $gt: 0 } }
            }
        }
    ])