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

MongoDBの各グループ内でmaxに対応するドキュメントをグループ化して選択するにはどうすればよいですか?

    $ redactを使用できます これを達成するための段階。 $ sortの使用を回避します 次に、もう一度 $ groupを実行します。 または $ unwind

    サンプルコード:

    db.getCollection('sales').aggregate([
    {$group:{"_id":"$hash",
             "max_num_sold":{$max:"$num_sold"},
             "records":{$push:"$$ROOT"}}},
    {$redact:{$cond:[{$eq:[{$ifNull:["$num_sold","$$ROOT.max_num_sold"]},
                           "$$ROOT.max_num_sold"]},
                    "$$DESCEND","$$PRUNE"]}},
    ])
    

    テストデータ:

    db.getCollection('sales').insert([
    {"title":"Foo","hash":17,"num_sold":49,"place":"ABC"},
    {"title":"Bar","hash":18,"num_sold":55,"place":"CDF"},
    {"title":"Baz","hash":17,"num_sold":55,"place":"JKN"},
    {"title":"Spam","hash":17,"num_sold":20,"place":"ZSD"},
    {"title":"Eggs","hash":18,"num_sold":20,"place":"ZDF"}
    ])
    

    テスト結果:

    {
            "_id" : 18,
            "max_num_sold" : 55,
            "records" : [
                    {
                            "_id" : ObjectId("567874f2b506fc2193a22696"),
                            "title" : "Bar",
                            "hash" : 18,
                            "num_sold" : 55,
                            "place" : "CDF"
                    }
            ]
    }
    {
            "_id" : 17,
            "max_num_sold" : 55,
            "records" : [
                    {
                            "_id" : ObjectId("567874f2b506fc2193a22697"),
                            "title" : "Baz",
                            "hash" : 17,
                            "num_sold" : 55,
                            "place" : "JKN"
                    }
            ]
    }
    


    1. Express / Node.jsエラー:参照エラー:Resが定義されていません

    2. 春のmongoによるシャーディング

    3. テスト構成で2.0FakeApplicationセットアップを再生します

    4. Node.jsにすべてのMongoDBデータベースを一覧表示するにはどうすればよいですか?