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

mongoコレクションに値が存在するかどうかを確認します

    まず、ドキュメントを配列のように保存している場合は、単に配列として保存してみませんか?リレーショナルデータベースのバックグラウンドを持っている場合、その方法で保存したくなることはわかりますが、Mongoでは、配列のようなものであれば、配列として保存する必要があります。

    {
        "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
        "0" : "h",
        "1" : "o",
        "2" : "m"
    }
    

    あるべき:

    {
        "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
        "keys" : [ "h", "o", "m" ]
    }
    

    この場合、Mongoには$addToSetという便利な演算子があります。 $pushと同じように機能します ただし、存在しない場合にのみ配列に追加されます。操作は次のようになります:

    collection.update( query, { $addToSet : { 'keys' : 'l' }}, callback );
    // add key 'l'
    
    collection.update( query, { $addToSet : { 'keys' : 'm' }}, callback );
    // looks in document, sees 'm' in array, and does nothing
    

    編集:

    更新により、配列にキーがない場合は追加されますが、存在するかどうかだけを知りたい場合は、findOneを使用するのが最善の方法だと思います。 :

    // find the doc by _id  and the value you want in keys, returns null if it's not a match
    collection.findOne({ _id : 52e5361f30f28b6b602e4c7f, 'keys' : 'l' }, function(err, doc) {
        if( doc == null ) {
            // do whatever you need to do if it's not there
        } else {
            // do whatever you need to if it is there
        }
        db.close();
    }
    

    挿入をそのままにするには、Keysを変更するだけです。 宛先:

    Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };
    

    また、インサートを変更する必要はありません。また、コレクションで、_idを変更することもできます。 usernameになります またはusernameを追加します ドキュメントへのフィールド。




    1. Spring BootAppRedisとSpringBootSessionGlobalRedisを分離する方法

    2. 運用データベース管理

    3. マングース:配列ではなく、単一のサブドキュメントを挿入する方法

    4. MongoDBの'count()'は非常に遅いです。どのようにそれを改良/回避しますか?