Den optimale bedste måde at gøre dette på er i MongoDB 3.2 eller nyere. Vi skal $project
vores dokumenter og brug $filter
operatør for at returnere en delmængde af "topicInfo"-arrayet, der matcher vores tilstand. Og fra og med MongoDB3.2 kan vi bruge $max
i $project
trin i tilstand
ition-udtryk og udføre en logisk operation på den returnerede værdi.
Den sidste fase i pipelinen er $match
trin, hvor du filtrerer disse dokumenter fra med tomme "topicInfo" ved hjælp af
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 } } }
])