これを行うには、集約フレームワークを使用できます。まず、 $sort
を実行する必要があります。
user
による および「_id」。そこから、 $group
「ユーザー」で$last
を使用します
各ユーザーの最後のドキュメントを返すアキュムレータ演算子。 $first
も使用できることに注意してください
ドキュメントを降順で並べ替えるが、昇順で並べ替えて$last
を使用する場合は、アキュムレータ演算子 私たちの意図を明確にします。
db.collection.aggregate([
{ "$sort": { "user": 1, "_id": -1 } },
{ "$group": {
"_id": "$user",
"user": { "$last": "$$ROOT" }
}}
])
生成するもの:
{
"_id" : "fje93jrg4",
"user" : {
"_id" : 2,
"user" : "fje93jrg4",
"event" : null,
"group" : null,
"name" : "Bob",
"text" : "Testing"
}
}
{
"_id" : "94fg844f",
"user" : {
"_id" : 1,
"user" : "94fg844f",
"event" : null,
"group" : null,
"name" : "Jake",
"text" : "Hello world"
}
}
{
"_id" : null,
"user" : {
"_id" : 4,
"user" : null,
"event" : "d0j3n9fn3",
"group" : null,
"name" : "My Event",
"text" : "Testing 2"
}
}
$project
を追加することをお勧めします
パイプラインに追加しますが、そうするとパフォーマンスが低下します。ただし、返されるドキュメントのすべてのキーと値のペアが必要ない場合は、ネットワークを介して送信されるデータの量と、クライアント側でドキュメントをデコードするために使用される時間とメモリの両方が削減されます。
$project
ステージは次のようになります:
{ "$project": {
"_id": "$user._id",
"user": "$user.user",
"event": "$user.event",
"group": "$user.group",
"name": "$user.name",
"text": "$user.text"
}}