Der optimale beste Weg, dies zu tun, ist in MongoDB 3.2 oder neuer. Wir müssen $project
unsere Dokumente und verwenden Sie den $filter
-Operator, um eine Teilmenge des "topicInfo"-Arrays zurückzugeben, die unserer Bedingung entspricht. Und ab MongoDB3.2 können wir den $max verwenden
im $project
Stufe in der cond
itionsausdruck und führen Sie eine logische Operation mit dem zurückgegebenen Wert aus.
Die letzte Stufe in der Pipeline ist der $match
Phase, in der Sie diese Dokumente mit leerem „topicInfo“ mithilfe des Codes
db.collection.aggregate([
{ "$project": {
"topicInfo": {
"$filter": {
"input": "$topicInfo",
"as": "t",
"cond": {
"$and": [
{ "$eq": [ "$$t.topic", "topic2"] },
{ "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
]
}
}
}
}},
{ "$match": { "topicInfo.0": { "$exists": true } } }
])