app.post('/api/getReports', (req, res)=>{
let data = req.body.data; // Array of objects
let reports = [];
let promise = new Promise((resolve, reject)=>{
db.collection('reports').find({}).toArray((err, res)=>{
resolve(res);
});
}).then((res)=>{
res.forEach((item, index)=>{
if(item.name === data.name) {
let count = item.count + data.count;
db.collection('reports').updateOne({name: item.name}, {$set: {count: count}});
} else {
db.collection('reports').insertOne(data)
}
});
})
})
Как мне проверить новые полученные данные с ранее полученными данными в коллекции и сравнить если такая запись уже существует тогда к count этой записи прибавить только data.count если такая запись не существует то добавить в коллекцию?
В общем случае, в виду неясности как выглядят сами reports
:
app.post('/api/getReports', async (req, res) => {
const { data } = req.body;
const reports = db.collection('reports');
try {
for(let i = 0; i < data.length; i++) {
const report = await reports.findOne({name: data[i].name});
if(report) {
await reports.updateOne({"_id": report._id}, {$inc: {count: data[i].count}})
} else {
await reports.insertOne(data[i]);
}
}
} catch(err) {
console.log(err)
}
})
В случае, если reports
это массив с объектами типа {name: "ads", count: 12}
:
app.post('/api/getReports', async (req, res) => {
const { data } = req.body;
const reports = db.collection('reports');
try {
for(let i = 0; i < data.length; i++) {
await reports.updateOne({name: data[i].name}, {$inc: {count: data[i].count}},{upsert: true})
}
} catch(err) {
console.log(err)
}
})
Имеем коллекцию:
{name: 'apple', count: 5},
{name: 'lemon', count: 4},
db.test.updateOne({name: 'lemon'}, {$inc:{count:1}}, {upsert: true})
- этот запрос увеличит count
у лимона
db.test.updateOne({name: 'cucumber'}, {$inc:{count:1}}, {upsert: true})
- этот запрос добавит в коллекцию документ
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сохранить выбранное положение option в select с нужным классомВ js и jQ не силён
Можно ли при использовании @angular/pwa кэшировать внешние API (домен приложения и API не совпадает)Если да то каким образом должна выглядеть коyфигурация...