【问题标题】:How to append the data to the existing json如何将数据附加到现有的 json
【发布时间】:2020-05-21 02:15:19
【问题描述】:

我正在尝试检查具有输入用户 ID 的文档是否存在。如果确实如此,我只想将 ProjectName 附加到现有文档文件中,否则我想创建一个新文档。请帮助我将数据附加到现有文档中。 提前谢谢你。

users.post('/createProject',function(Project, res, next){
  var Details = {
    User_Id:Project.body.userid,
    Project_Name: Project.body.ProjectName
  }
  MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("EMWorks");
    dbo.collection("projects").findOne(Project.body.userid)
      .then(user => {
        if(!user) {
          dbo.collection("projects").insertOne(Details, function(err, response) {
              if (err) throw err;
            console.log("***  DOCUMENTED INSERTED ***");
            res.send('Project Created');
          });
          }else{
            dbo.collection("projects").append(Details, function(err, response) {
              if (err) throw err;
              console.log("***  Data Appended ***");
              res.send('Project Created');
            });
          }
        })
        .catch(err => {
          res.send('error: ' + err)
        })      
    });
})

【问题讨论】:

  • 您想在users 集合中检查用户并在projects 集合中进行更新插入吗?为什么你必须在用户集合中做 .find() 而你可以在 projects 中做同样的事情?有什么区别?
  • user 是一个变量,其中存储了 findOne() 的输出
  • 我的问题不一样!!您在项目集合中没有一个值为Project.body.userid 的字段,而不是在用户集合中检查吗??

标签: reactjs mongodb mongoose


【解决方案1】:

由于您没有退回文档,您可以使用 .updateOne()upsert 否则如果您想退回文档使用 .findOneAndUpdate() ,请尝试以下代码:

users.post('/createProject', function (Project, res, next) {
    var Details = {
        User_Id: Project.body.userid,
        Project_Name: Project.body.ProjectName
    }
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("EMWorks");
        dbo.collection("projects").updateOne(
            { User_Id: Project.body.userid },
            { $set: { Project_Name: Project.body.ProjectName } },
            { upsert: true } 
            /** If no document matches with 'User_Id: Project.body.userid' then as specified 'upsert: true' will create a new document with filter & update parts combined. */
        ).then(resp => {
            if (resp.nupsertedId) {
                console.log("***  DOCUMENT INSERTED ***");
                res.send('Project Created');
            } else {
                console.log("***  Data Appended ***");
                res.send('Project Created');
            };
        }).catch(err => {
            res.send('error: ' + err)
        })
    });
})

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多