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

配列フィールドに特定の配列の少なくともn個の要素が含まれているドキュメントを検索します

    コレクションに次のドキュメントがあるとします。

    { "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d03"), "a" : [ 0, 8, 432, 9, 34, -3 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }
    

    次の入力配列とn = 2

    var inputArray = [1, 3, 0];
    

    集計フレームワークを使用して、配列フィールドに特定の配列の少なくともn個の要素が含まれているドキュメントを返すことができます。

    $match 配列の長さがn以上のドキュメントのみを選択します 。これにより、パイプラインで処理されるデータの量が削減されます。

    $redact パイプラインオペレーターは、$condを使用して論理条件処理を使用します 演算子と特殊操作$$KEEP 論理条件が真または$$PRUNEであるドキュメントを「保持」する 条件がfalseのドキュメントを「破棄」します。

    この場合、条件は$gteです。 $sizeの場合はtrueを返します $setIntersectionを使用して計算した2つの配列の交点の 演算子が2以上である 。

    db.collection.aggregate(
        [ 
            { "$match": { "a.1": { "$exists": true } } }, 
            { "$redact": { 
                "$cond": [ 
                    { "$gte": [ 
                        { "$size": { "$setIntersection": [ "$a", inputArray ] } }, 
                        2
                    ]},
                    "$$KEEP", 
                    "$$PRUNE" 
                ]
            }}
        ]
    )
    

    生成するもの:

    { "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }
    


    1. PHPドライバーを使用したMongoDB集計クエリ

    2. MongoDB Atlasの概要:パート1

    3. 数値が範囲内にあるかどうかを判断するためのRedisまたはMongo?

    4. オープンスタンダードの作成:ApacheAtlasを使用した機械学習ガバナンス