javascript - Node js和mongo更新文件中不存在的数据但数据存在于数据库中

标签 javascript node.js mongodb

我的程序中有一个功能,我从 csv 上传文件,然后解析它并添加到 mongo 数据库。

场景一,假设我有来自 ff 的数据,这些数据已经被解析并成功添加到数据库中。现在数据库包含 2 条记录。

文件1

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
},{
  "userId": 2,
  "id": 2,
  "title": "delectus aut autem2",
  "completed": false
}

现在用户再次上传文件,但它现在只包含用户 ID 为 1 的数据 1,用户 ID 为 2 的数据 2 不再存在,但用户 ID2 仍然存在于数据库中。

所以我想要的是它会更新文件中存在的数据,还会更新文件中不存在但存在于数据库中的数据

例如,如果我将上传此文件 2,这将使用以下数据更新用户 ID 1,还将更新用户 ID2 并将用户 ID2 完成值设置为:true。

文件2

{
      "userId": 1,
      "id": 1,
      "title": "delectus aut autem 1111",
      "completed": false


    },

知道什么是最好的方法吗?下面是我当前的代码,它与上面讨论的问题具有相同的流程,我只是使用了 VIN。

 async.parallel({
                            Q1: function (next) {
                                //update existing one
                                Vehicle.model.findOne().where('VIN', value.VIN).then(function (data) {
                                    if (data) {
                                        Vehicle.updateItem(data, value, function (err) {
                                            if (err) {
                                                console.log("[ERROR]", err)
                                            }
                                        })
                                    } else {
                                        //else create new data
                                        var newVehicle = new Vehicle.model({ value }),
                                            updater = newVehicle.getUpdateHandler(value, res, {
                                                errorMessage: 'There was an error creating new data:'
                                            });
                                        updater.process(value, function (err) {
                                            if (err) {
                                                console.log("[ERROR]", err)
                                            }
                                        })
                                    }

                                })
                            },
                            Q2: function(next){
        
                            }
                        })

最佳答案

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
},{
  "userId": 2,
  "id": 2,
  "title": "delectus aut autem2",
  "completed": false
}

upsert 查询。它会做什么

1-如果userID为2的文档已经存在,则更新数据库中提供的所有字段

2-由于 upsert 为真,因此如果文档不存在,它将插入一个新文档。

 db.collection.update({userId:2},{$set:{userID:2,id:2,title:"delectus aut autem2","completed": false}}, {upsert:true})

查看documents

关于javascript - Node js和mongo更新文件中不存在的数据但数据存在于数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58816169/

相关文章:

node.js - res.render 中的 req.param 导致奇怪的控制台日志

node.js - 将实时视频流保存到视频文件

node.js - 为什么我的 firebase 回调被多次触发?

c++ - C++ 中的 MongoDB $group 命令

javascript - 从 JSON 使用 Jquery 更新下拉列表

javascript - 内容现在可见时如何将类添加到下拉窗口?

javascript - JavaScript 中的正则表达式替换,某些部分保持不变

javascript - 与 insertOne 函数一起使用时,MongoDB 架构不插入属性

ruby - 使用 GridFS 时出现 "Document exceeds allowed max BSON size. The max is 16777216."错误

java - 根据复选框值调用 Javascript