如果它不存在,如何在 MongoDB 中添加新文档?

Posted

技术标签:

【中文标题】如果它不存在,如何在 MongoDB 中添加新文档?【英文标题】:How to add new document in MongoDB if it doesn't exists? 【发布时间】:2021-08-16 15:14:32 【问题描述】:

我是 mongodb 的新手。我正在尝试通过 mongoose 在 mongodb 中插入数据。但我遇到了问题。

我附上了关于我希望如何插入数据的图片。

现在这是我的架构。

const ticketApplicationSchema = new mongoose.Schema(



    ticketId: 
        type: ObjectId,
        text: String,
        required: true,
        ref: "Ticket",
      ,
      applications:[
          userId:
              type:ObjectId,
              default:"adsfadsfasdf",
              ref:"User"
          ,
          answers:
              type:Array
          
      ]

)

还有我的插入数据函数

const insertTicket = (ticketId, ticketObject) => 
  return new Promise((resolve, reject) => 
    try 
      ticketApplicationSchema
        .findOneAndUpdate(
           ticketId ,
          
          ticketObject,

          
            new: true,
            upsert: true,
          
        )
        .then((data) => resolve(data))
        .catch((error) => 
          // console.log(error);
          reject(error);
        );
     catch (error) 
      console.log(error);
      // reject(error);
    
  );
;

请帮我看看我哪里做错了?

简而言之,告诉我如何将应用程序数据(用户和答案)作为数组添加到应用程序对象。我希望将数据插入同一个ticketId。当我重新运行代码时,它只是替换当前数据,而不是添加新的用户和票证对象。

这是图片

例如,我的 ticketId 是 abcd1234。现在多个用户可以提交他们的答案。

【问题讨论】:

很难理解你在期待什么。能不能说的清楚一点。 首先,感谢您关注我的问题@TusharShahi。我想插入一个包含用户 ID 和用户提交的 3 个答案的对象。该对象将作为数组插入到应用程序中。换句话说:应用程序:[用户:用户ID,答案:[“a”,“b”,“c”],用户:用户ID,答案:[“a”,“b”,“c”] , user: userId, answers: ["a","b","c"] ] 我认为很清楚。如果没有,请告诉我,我会进一步解释。谢谢。 但是ticketId 是一样的,并且在应用程序内部,您正在添加用户及其答案? 看,我的项目是:会有一个工单列表,用户点击工单,会给出答案。现在我想将它存储在我的数据库中。所以我想添加ticketId,然后添加userId以及他的答案。而且由于会有多个用户,所以我想将它们添加到一个数组中。 这就是我期望添加的数据pasteboard.co/K3YTTKn.png 【参考方案1】:

如果你的 newArray 在一个新对象中,你可以像这样简单地 push 那个对象:

ticketApplicationSchema.findOneAndUpdate(
    ticketId , 
    $push: 
    applications: newUserObject   
   ).then((data) => resolve(data))
        .catch((error) => 
          // console.log(error);
          reject(error);
        );
     catch (error) 
      console.log(error);
      // reject(error);
    
  );

【讨论】:

以上是关于如果它不存在,如何在 MongoDB 中添加新文档?的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

如果 mongodb 中不存在,如何修改现有数据或创建新数据?

如何在 MongoDB 中修改添加的动态文档字段

MongoDB:如何使用 Mongoose 添加或更新子文档?

Mongodb如何仅在不存在时插入(如果存在则不更新)?