Я работаю с MongoAtlas.Я решил обновить priceLastUpdate с триггером (тип_операции: обновление, указание события: true, полный_документ: false).
функция триггера:
exports = function(changeEvent){
if(changeEvent.updateDescription.updatedFields.price !== undefined){
context.services.get("xxx").db("xxx").collection("product_items")
.findOneAndUpdate({
_id: changeEvent.documentKey._id
},
{
$set:{
price_lastupdate: new Date()
}
}
);
}
};
, но моя проблема с множественной вставкой или многократным обновлением до сих пор не решена.Когда я вставляю / обновляю 350 элементов в 350 циклах с помощью findOneAndModify , время выполнения составляет около 18 секунд.Это недопустимо 10000+ элементов.
Моя текущая служба HTTP:
exports = function(payload, response) {
const {data} = payload.query;
const productPrices = JSON.parse(data);
let products = context.services.get("xxx").db("xxx").collection("product_items");
productPrices.forEach(oneProductPrice => {
context.functions.execute("setProductPrice", oneProductPrice);
});
return "OK";
};
Моя текущая функция setProductPrice (вызывается из HTTPСервис):
exports = function(product){
let products = context.services.get("xxx").db("xxx").collection("product_items");
products.findOneAndUpdate({
code: product.code,
stock_id: product.stock_id
},
{
$set:{
price: product.price,
},
$setOnInsert:{
code: product.code,
stock_id:product.stock_id,
price_lastupdate: new Date()
}
},
{
upsert: true,
});
};
Я искал массовая вставка / обновление :
var bulk = db.items.initializeUnorderedBulkOp();
....
, но Mongo Atlas не знает эту функцию.
Есть идеи?