节点mongo批量更新,获取更新的列名

时间:2018-07-26 18:03:12

标签: node.js mongodb mongoose

我在nodejs中对mongodb进行了批量更新 我正面临以下情况

用户可以一次更新20-30个字段,可能他不全部更新,他可能更改1或2或5或全部,我想确切地知道哪些字段,即其值已被new覆盖。值。

我需要知道这一点,因为每个字段都具有权重,如果它们更新特定字段,那么我必须重新计算所有列的权重并将其分配给用户

例如,如果

User.update({_id: user_id},{ $set : {key1:value,key2:value,key3:value... }})

现在假设key3被覆盖,但是key1和key2保持不变, 所以我想知道key3已经被覆盖。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您使用findOneAndUpdate函数进行更新,则可以在更新之前检索文档,使用该检索值,您可以将其与给定的文档进行比较以找出已更新的字段。 更新功能将如下所示:

db.collection("Collection Name").findOneAndUpdate({"Find Query"},
    {$set: {"Update Query"}},
    {returnOriginal: true},
    (err, res) => {
        //... Some codes for comparing docs
});

“ returnOriginal”选项使查询在更新操作之前返回更新的文档。