Я бы хотел установить значение, добавив другое значение к себе во время обновления. До сих пор я пытаюсь использовать обновления с линиями агрегации , чтобы установить значение в качестве накопителя следующим образом:
(async function(){
try{
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
const client = await MongoClient.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const db = await client.db('mydb');
const myCollection = await db.collection('myCollection');
await myCollection.createIndex({name:1},{unique:true}).catch(reason => console.error(reason));
for (let i=0;i<7;i++){
let docExists = await myCollection.findOne({name : 'test'});
if (await docExists == null){
await myCollection.updateOne({name : 'test'},{$set: {name : 'test',cumulativeVal : i}}, function(err, res){if (err) throw err;});
}
else {
await myCollection.updateOne({name : 'test'},{$set: {name : 'test',cumulativeVal : {$add: [$cumulativeVal,i]}}}, function(err, res){if (err) throw err;});
}
}
let result = await myCollection.find({})//.catch(e => { throw e; });;
console.log('Result: ',await result.toArray());
client.close();
}
catch(err){console.error(err); }
})()
В примере я ожидаю, что окончательная запись будет (Я получаю []
):
{name: "test", cumulativeVal : 21}
Я думаю, что я неправильно использую операцию $add
здесь. Редактировать (на самом деле он не доходит до оператора else) ...
Существует ли стандартный способ задания совокупных значений в документе mongodb?