Я работаю над программным обеспечением, которое использует MongoDB в качестве базы данных. У меня есть такая коллекция (это всего лишь один документ)
{
"_id" : ObjectId("5aef51e0af42ea1b70d0c4dc"),
"EndpointId" : "89799bcc-e86f-4c8a-b340-8b5ed53caf83",
"DateTime" : ISODate("2018-05-06T19:05:04.574Z"),
"Url" : "test",
"Tags" : [
{
"Uid" : "E2:02:00:18:DA:40",
"Type" : 1,
"DateTime" : ISODate("2018-05-06T19:05:04.574Z"),
"Sensors" : [
{
"Type" : 1,
"Value" : NumberDecimal("-98")
},
{
"Type" : 2,
"Value" : NumberDecimal("-65")
}
]
},
{
"Uid" : "12:3B:6A:1A:B7:F9",
"Type" : 1,
"DateTime" : ISODate("2018-05-06T19:05:04.574Z"),
"Sensors" : [
{
"Type" : 1,
"Value" : NumberDecimal("-95")
},
{
"Type" : 2,
"Value" : NumberDecimal("-59")
},
{
"Type" : 3,
"Value" : NumberDecimal("12.939770381907275")
}
]
}
]
}
и я хочу выполнить этот запрос к нему.
db.myCollection.aggregate([{ "$unwind" : "$Tags" },
{"$match" : { "$and" : [{ "Tags.DateTime" : { "$gte" : ISODate("2018-05-06T19:05:02Z"), "$lte" : ISODate("2018-05-06T19:05:09Z") } },
{ "Tags.Uid" : { "$in" : ["C1:3D:CA:D4:45:11"] } }] } },
{ "$unwind" : "$Tags.Sensors" }, { "$match" : { "$Tags.Sensors.Type" : { "$in" : [1,2] } } },
{ "$project" : { "_id" : 0, "EndpointId" : "$EndpointId", "TagId" : "$Tags.Uid", "Url" : "$Url", "TagType" : "$Tags.Type",
"Date" : "$Tags.DateTime", "SensorType" : "$Tags.Sensors.Type", "Value" : "$Tags.Sensors.Value" } }
])
проблема в том, что второе совпадение (которое проверяет $Tags.Sensors.Type
) не работает и не влияет на результат запроса.
Как я могу решить это?
Если это не правильный путь, как правильно выполнять эти условия?