添加计算字段猫鼬的最有效方法

时间:2019-03-17 18:30:28

标签: node.js mongoose

嗨,我有一个相当大的数据集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
                })

1 个答案:

答案 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

希望这对您有所帮助。