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

MongoDBで配列を検索し、一致する数で並べ替えます

    はい、AggregationFrameworkを使用することは可能です。

    前提条件

    • ここで使用されるデータセットは、一致の総数順に並べられた、リストにタグが含まれるドキュメントの取得で使用されるものと同じです。
    • tags 属性はセットです(繰り返される要素はありません)

    クエリ

    このアプローチでは、結果を巻き戻し、巻き戻された結果を使用して一致述語を再評価する必要があるため、非常に非効率的です。

    db.test_col.aggregate(
        {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
        {$unwind: "$tags"}, 
        {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
        {$group: {
            _id:{"_id":1}, 
            matches:{$sum:1}
        }}, 
        {$sort:{matches:-1}}
    );
    

    期待される結果

    {
        "result" : [
            {
                "_id" : {
                    "_id" : ObjectId("5051f1786a64bd2c54918b26")
                },
                "matches" : 3
            },
            {
                "_id" : {
                    "_id" : ObjectId("5051f1726a64bd2c54918b24")
                },
                "matches" : 2
            },
            {
                "_id" : {
                    "_id" : ObjectId("5051f1756a64bd2c54918b25")
                },
                "matches" : 1
            }
        ],
        "ok" : 1
    }
    


    1. redis-cliは127.0.0.1にリダイレクトされました

    2. MongoDBで同等のSQL結合を実行するにはどうすればよいですか?

    3. さまざまなタイプのMongoDBインデックス

    4. mongoを使用してすべてのドキュメントで配列の出現をカウントします