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

$unwindなしで配列内の重複を検索

    $range を使用できます 1から数値の配列を生成します nへ ここで、n $ size adds 。次に、その番号を「ループ」して、addsかどうかを確認できます。 indexで ( $ arrayElemAt indexの前のどこかに存在します はいの場合、それは重複と見なされます。 $indexOfArray を使用できます 0とindexを指定する配列に要素が存在するかどうかを確認します 検索範囲として。

    次に、$projectを使用する必要があります および $ map インデックスを実際の要素に置き換えます。 $setUnion を追加することもできます 最終結果セットでの重複を避けるため。

    db.users.aggregate([
        {
            $addFields: {
                duplicates: {
                    $filter: {
                        input: { $range: [ 1, { $size: "$adds" } ] },
                        as: "index",
                        cond: {
                            $ne: [ { $indexOfArray: [ "$adds", { $arrayElemAt: [ "$adds", "$$index" ]  }, 0, "$$index" ] }, -1 ]
                        }
                    }
                }
            }
        },
        {
            $project: {
                _id: 1,
                adds: {
                    $setUnion: [ { $map: { input: "$duplicates", as: "d", in: { $arrayElemAt: [ "$adds", "$$d" ] } } }, [] ]
                }
            }
        }
    ])
    

    版画:

    { "_id" : 1, "adds" : [ "111" ] }
    { "_id" : 2, "adds" : [ "555" ] }
    { "_id" : 3, "adds" : [ "888" ] }
    


    1. atlasmongoデータベースに接続する

    2. group by?のmongodb集約パイプラインでミリ秒を日付に変換しますか?

    3. Mongodbに埋め込まれたオブジェクトの値で並べ替える

    4. MongoDBに画像を保存する