我收集了各种活动和设备集合:
活动:
{
"_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
我该怎么做?
现在我从空的数组设备中获取文件(来自事件收集)。
答案 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 } }
}
}
])