sql >> Database >  >> NoSQL >> MongoDB

Mongoose - Verhoog een waarde binnen een array van objecten

Het is niet mogelijk om de waarde direct te verhogen in de .find vraag of labelOptions is een array van objecten. Om het gemakkelijker te maken, moet u de labelOptions . wijzigen type van array van objecten naar object:

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

Overweeg ook om .findByIdAndUpdate . te gebruiken in plaats van .findOneAndUpdate als u een zoekopdracht uitvoert via de _id . van het document . En dan kun je bereiken wat je wilt door:

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

UPDATE:Als u volhardt in het gebruik van Array of Objects voor labelOptions , er is een oplossing:

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. MongoDB Volledige en gedeeltelijke tekstzoekopdracht

  2. beginnen adhoc-query's/updates uw productiviteit met MongoDB te vernietigen?

  3. Hoe gebeurtenissen te gebruiken, houd mongodb-logica uit node.js-verzoekhandlers

  4. MongoDB ISODate-query met PHP