Похоже, вам нужно upsert означает обновление, если документ / запись существует, или вставьте / создайте его.
Таким образом, это может быть сделано либо 1 документом за один раз, либо навалом, но сначала потребуется запрос, чтобы найти соответствующий документ (ы).
Так как вы не предоставили примерные данные, поэтому я не могу написать пример кода для вас, но вот ссылка, чтобы получить вас запущен, для массовых: Bulk.find.upsert и для одного документа эта ветка хороша: how-do-i-update-upsert-a-document-in-mon goose
Обновление: вот массовое обновление mongodb в действии:
const mongo = require('mongodb');
const MongoClient = mongo.MongoClient;
const client = new MongoClient('mongodb://127.0.0.1:27017', { useUnifiedTopology: true });
client.connect(async err => {
if (err) {
console.log('DB Connection Error ', err);
} else {
const db = client.db('node-cheat-db');
// lets assume you've read all file contents and data is now ready for db operation
let records = [
{first: 'john', last: 'doe', email: 'johen@doe.com'},
{first: 'jack', last: 'doe', email: 'jack@doe.com'},
{first: 'jill', last: 'doe_updated', email: 'jill@doe.com'}
];
// prepare bulk upsert so that new records are created and existing are updated
let bulk = db.collection('users').initializeOrderedBulkOp();
for (var i = 0; i < records.length; i++) {
bulk.find({
"email": records[i].email // at least 1 key should be treated as PK; in this example email is PK
}).upsert(records[i]).replaceOne(records[i]);
}
bulk.execute(function (err,updateResult) {
if (updateResult.result.ok != 1) {
console.log('Bulk Upsert Error');
} else {
console.log(`Inserted: ${updateResult.result.nUpserted} and Updated: ${updateResult.result.nModified}`);
}
});
}
});
пример вывода выглядит так:
Вставлено: 0 и обновлено: 3
Дополнительные сведения:
Клон узла-чит массовое обновление , запуск node bulk-update.js
, за которым следует npm install mongodb
.