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

マングース-オブジェクトの配列内の値をインクリメントします

    .findの値を直接インクリメントすることはできません labelOptionsかどうかを問い合わせる オブジェクトの配列です。簡単にするには、labelOptionsを変更する必要があります オブジェクトの配列からオブジェクトへの入力:

    "labelOptions": {
        "Bob": 112,
        "Billy": 32,
        "Joe": 45
    };
    

    .findByIdAndUpdateの使用も検討してください .findOneAndUpdateの代わりに ドキュメントの_idでクエリを実行している場合 。そして、次の方法で目的を達成できます。

    Poll.findByIdAndUpdate(
        id,
        {$inc: {`labelOptions.${labelOption}`: 1 }},
        function(err, document) {
        console.log(err);
    });
    

    更新:labelOptionsにオブジェクトの配列を使用し続ける場合 、回避策があります:

    Poll.findById(
        id,
        function (err, _poll) {
    
            /** Temporarily store labelOptions in a new variable because we cannot directly modify the document */
            let _updatedLabelOptions = _poll.labelOptions;
    
            /** We need to iterate over the labelOptions array to check where Bob is */
            _updatedLabelOptions.forEach(function (_label) {
    
                /** Iterate over key,value of the current object */
               for (let _name in _label) {
    
                   /** Make sure that the object really has a property _name */
                   if (_label.hasOwnProperty(_name)) {
    
                       /** If name matches the person we want to increment, update it's value */
                       if (_name === labelOption) ++_label._name;
                   }
               }
            });
    
            /** Update the documents labelOptions property with the temporary one we've created */
            _poll.update({labelOptions: _updatedLabelOptions}, function (err) {
    
                console.log(err);
            });
        });
    


    1. Mongoは、配列に特定の配列のx値が含まれているドキュメントを検索します

    2. Mongodbエラー:位置演算子がクエリから必要な一致を見つけられませんでした

    3. mongodb DateTime Convertを使用したC#

    4. 製品環境でallowDiskUseオプションを使用する必要がありますか?