आप वर्तमान दस्तावेज़ के गुणों को अद्यतन() के भीतर से संदर्भित नहीं कर सकते हैं। आपको या तो सभी दस्तावेज़ों को दोहराना होगा और उन्हें अपडेट करना होगा या $multiply
$project
. के भीतर एकत्रीकरण में अंकगणितीय संक्रिया के रूप में व्यंजक num_tires
. को गुणा करने के लिए पाइपलाइन स्थिरांक वाला क्षेत्र:
db.cars.aggregate([
{
$match: {
make: 'Honda'
}
},
{
$project: {
make: 1,
model: 1,
num_tires: 1,
price: {
$multiply: [ "$num_tires", 500 ]
}
}
}
])
या आप एक मनमाना फ़ील्ड शामिल करने के लिए अपनी स्कीमा अपडेट कर सकते हैं unit_price: {type: Number, default: 500}
जिसे आप $multiply: [ "$num_tires", "$unit_price" ]
के रूप में उपयोग कर सकते हैं $project
. में पाइपलाइन।
एक अन्य विकल्प सभी मिलान किए गए दस्तावेज़ों के माध्यम से पुनरावृति करना और इस तरह सेव विधि का उपयोग करके अपडेट करना है:
var Car = require('car');
Car.find({make: 'Honda'}).snapshot().forEach(
function (e) {
// update document, using its own properties
e.price = e.num_tires * 500;
// remove old property
delete e.price;
// save the updated document
Car.save(e);
}
);
या $set
. का उपयोग कर रहे हैं ऑपरेटर:
var Car = require('car');
Car.find().forEach(
function (elem) {
Car.update(
{
_id: elem._id,
make: "Honda"
},
{
$set: {
price: elem.num_tires * 500
}
},
{multi: true},
function(err) {
console.log("There's an error ", err);
}
);
}
);
यदि आपके पास उस मूल्य के लिए डिफ़ॉल्ट मान था जो num_tires
. के बराबर है , तो हो सकता है कि आप केवल price
. को अपडेट करना चाहें उसी दस्तावेज़ में किसी अन्य फ़ील्ड को संदर्भित किए बिना, $mul
ऑपरेटर:
var Car = require('car');
Car.update(
{make: 'Honda'},
{$mul: {price: 500}},
{multi: true},
function(err) {
console.log("There's an error ", err);
}
});