MongoDB версии 3.6.7, mongoDB node.js версия драйвера 3.1.10.
Имейте функцию, которая должна добавить некоторые данные в базу данных в массовой неупорядоченной операции. Когда вызывается bulk.execute()
, данные вставляются в БД, как было проверено вручную, в этом случае, однако объект bulkWriteResult
, который должен быть создан в результате выполнения, не возвращается.
Это необходимо для использования в других функциях для определения количества вставок и т. Д. Поэтому, когда рассматриваемая функция объединена в цепочку с другими функциями, она возвращает неопределенное значение, при добавлении bulk.execute().then(console.log)
также ничего не регистрируется в терминале.
Функция принимает 3 параметра: MongoClient, имя коллекции и документы для вставки в БД, представляющую собой массив документов.
Также безуспешно пытались добавить ответные вызовы err и result, ни один из console.logs не достигнут.
batch.execute((err, result) => {
console.log('RESULT INSERTED:', result.nInserted)
console.log('RESULT ERRORS:', result.getWriteErrorCount())
console.log('RESULT INSIGHTS:', result.getWriteErrors())
console.log('ERROR:', err)
})
Есть идеи, почему bulkWriteResult
не будет возвращен, пока массовая вставка прошла успешно? Функция работала и возвращала ожидаемый объект до обновления драйвера узла mongoDB до 3.1.10.
const insertManyMissingEntries = (database, collectionName, documents) => {
const db = database.db('data')
const collection = db.collection(collectionName)
const batch = collection.initializeUnorderedBulkOp()
documents.forEach(doc => {
batch
.find({ year: doc.year, month: doc.month, code: doc.code })
.upsert()
.updateOne({ '$setOnInsert': doc })
})
return batch.execute()
}