#mongodb #aggregation-framework
#mongodb #агрегация-фреймворк
Вопрос:
Используя результаты этого запроса:
const results = db.collection.aggregate([
{ $match: { _id: { in: ids } } },
{ $set: {
field: {
$cond: {
if: someCondition,
then: true,
else: "$field"
}
}
} }
])
Каков наилучший способ сохранения results
? Использование updateMany
? Но как?
Результаты агрегирования представляют собой массив db.collection
документов. Для этого должно быть оптимизированное решение?
Я ожидал, что в Mongo будет что-то вроде:
// (WARNING: This code is not valid)
db.collection.updateDocuments(arrayOfUpdatedDocuments)
ПРИМЕЧАНИЕ: я не могу использовать $out
, потому что мы не используем Mongo 4.4, поэтому я не могу писать в той же запрашиваемой коллекции.
Комментарии:
1. Используйте $merge или $out для другой коллекции. Какую проблему вы пытаетесь решить?
2. @D.SM Я хочу запрашивать и обновлять коллекцию наиболее эффективным способом.
3.
$out
доступно, начиная с MongoDB 2.6, если только вы не хотите создать коллекцию в другой базе данных, в этом случае начиная с MongoDB 4.4. Используете ли вы более старую версию?
Ответ №1:
Я обнаружил, что bulkWrite
это позволяет отправлять целый документ при каждом обновлении. Итак, это будет хороший вариант:
db.collection.bulkWrite(
results.map((doc) => {
return {
updateOne: {
filter: { _id: doc._id },
update: doc,
},
};
})
)