これを行うための最適な最良の方法は、MongoDB3.2以降です。 $ project
を実行する必要があります
ドキュメントを使用して、 $ filter
条件に一致する「topicInfo」配列のサブセットを返す演算子。また、MongoDB3.2以降、 $maxを使用できます。
$ project
で cond
のステージ 式を記述し、戻り値に対して論理演算を実行します。
パイプラインの最終段階は、 $ match
>
$ examples
要素クエリ演算子と
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 } } }
])