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

IDのリストが与えられた場合、コレクションに存在しないIDを照会するための最良の方法は何ですか?

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

    { "_id" : ObjectId("55b725fd7279ca22edb618bb"), "id" : 1 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bc"), "id" : 2 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bd"), "id" : 3 }
    { "_id" : ObjectId("55b725fd7279ca22edb618be"), "id" : 4 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bf"), "id" : 5 }
    { "_id" : ObjectId("55b725fd7279ca22edb618c0"), "id" : 6 }
    

    および次のidのリスト

    var listId = [ 1, 3, 7, 9, 8, 35 ];
    

    .filterを使用できます idsの配列を返すメソッド それはあなたのコレクションにはありません。

    var result = listId.filter(function(el){
        return db.collection.distinct('id').indexOf(el) == -1; });
    

    これにより、

    が得られます
    [ 7, 9, 8, 35 ] 
    

    集約フレームワークも使用できるようになりました および$setDifference オペレーター。

    db.collection.aggregate([
       { "$group": { "_id": null, "ids": { "$addToSet": "$id" }}}, 
       { "$project" : { "missingIds": { "$setDifference": [ listId, "$ids" ]}, "_id": 0 }}
    ])
    

    これにより、次のようになります。

    { "missingIds" : [ 7, 9, 8, 35 ] }
    


    1. redis:alpineDockerイメージを実行する際の警告を修正する方法

    2. MongoDBのインデックスのリスト?

    3. リモート接続用にRedisポートを開きます

    4. CentOS7へのRedisのインストール