Det optimala bästa sättet att göra detta är i MongoDB 3.2 eller senare. Vi måste $project
våra dokument och använd $filter
operatorn för att returnera en delmängd av "topicInfo"-matrisen som matchar vårt villkor. Och från och med MongoDB3.2 kan vi använda $max
i $project
steg i cond
tion-uttryck och utför en logisk operation på det returnerade värdet.
Det sista steget i pipelinen är $match
steg där du filtrerar bort dessa dokument med tomma "topicInfo" med hjälp av
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 } } }
])