sql >> データベース >  >> NoSQL >> MongoDB

MongooseでIDの最初の出現のみを返す方法は?

    これを行うには、集約フレームワークを使用できます。まず、 $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"
    }}
    


    1. MongoDB GridFSでの全文検索?

    2. PHPスタートアップダイナミックライブラリphp_mongo.dllを読み込めません

    3. Mongo/Mongooseクエリ結果にフィールドがありません

    4. Mongoレプリカセットの歪んだ読み取り負荷