.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);
});
});