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

一致の総数順に並べられた、タグがリストに含まれるドキュメントを取得します

    In 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. 要素の正規表現配列を使用したMongoDBクエリ$in

    2. 分散キャッシングフレームワークとしてのmemcache、redis、ehcacheの比較

    3. ループで呼び出されたDBクエリから取得したデータを返す際の問題

    4. 起動時にRスクリプトを実行する