嗨,我有一个相当大的数据集55K记录。我正在计算这些移动均线。再次存储这些结果的最有效方法是什么?
目前我正在这样做。这导致极大量的记录被一张一张地写入。如果我将计算的值添加到records数组,是否可以通过一次调用将整个列表写回?
使用批量更新更新了代码。但是,它无法更新“ MA16”记录。即使我肯定知道“列表”数组中有有效数据。
似乎与文档匹配,但不会更新。它将在数据库中产生一个MA16字段,该字段始终为空。
Logged output.
deletedCount:0
insertedCount:0
insertedIds:Object {}
matchedCount:150
modifiedCount:0
n:0
nInserted:0
nMatched:150
nModified:0
nRemoved:0
nUpserted:0
ok:1
var bulkUpdateArray = _.map(records, (record, index) => {
return {
updateOne :{
"filter":{_id : record._id},
"update":{$set: {"MA16": list[index]}},
"upsert":true
}
}
});
mongoose.connection.db.collection(req.body.day).bulkWrite(bulkUpdateArray).then(result => {
console.log("Insert result", result);
}).catch(err=>{
//catch the error here
})
答案 0 :(得分:1)
您可以使用BulkWrite实现您想要的。
尝试一下:
var bulkUpdateArray = _.map(records, (record, index) => {
return {
updateOne :{
"filter":{_id : record._id},
"update":{$set: {"MA16": list[index]}},
"upsert":true
}
}
})
mongoose.connection.db.collection(req.body.day).bulkWrite(bulkUpdateArray).then(result => {
//check the result of bulk update here
}).catch(err=>{
//catch the error here
})
您可以使用updateOne
的{{1}}运算符。
从MongoDB官方文档来看,bulkWrite具有以下选项:
bulkWrite
有关更多信息,请阅读MongoDB bulkWrite documentation。
希望这对您有所帮助。