如果在集合中找不到特定的字段值,则插入新文档

时间:2019-09-04 08:47:14

标签: javascript node.js mongodb mongodb-atlas mongodb-stitch

我有一组项目,所有项目都有序列号和附加的其他字段。文件看起来像这样

{
    _id: ObjectId(),
    serialNum: "123456789",
    ...otherfields
}

我要插入一个新文档,但前提是没有一个现有文档与serialNum字段匹配。

我目前使用下面的方法,但是它要求我抓取整个集合,遍历整个集合,然后执行插入。我可以使用其他替代方法吗,因为在我的大型收藏夹上这很慢

当前代码:

const insertItems = (newItem) => {

     const itemsCollection = mongodb.db("database").collection("customers");
     
     itemExists = false;
    
     itemsCollection.find({}).toArray()
     .then((items) => {
          for(let i = 0; i < items.length; i++){
              if(items[i].serialNum == newItem.serialNum){
                   itemExists = true
              }
          }
     })
     .then(() => {
          if(itemExists){
               //error here
          } else {
               //insert new item
          }
     })
}

2 个答案:

答案 0 :(得分:0)

为什么不循环所有集合,为什么不只获取序列号为as的那个:

const insertItems = (newItem) => {

 const itemsCollection = mongodb.db("database").collection("customers");

 itemExists = false;

 itemsCollection.find({serialNum:newItem.serialNum}).toArray()
 .then((items) => {
      if(items.length){
         itemExists=true
      }
 })
 .then(() => {
      if(itemExists){
           //error here
      } else {
           //insert new item
      }
 })
}

答案 1 :(得分:0)

尝试此代码

    const insertItems = (newItem) => {

         const itemsCollection = mongodb.db("database").collection("customers");
         itemsCollection.update({serialNum:newItem.serialNum},{
         // New fields which you want to insert or update
         },{upsert: true})
         .then((items) => {
             console.log(item);
         }).catch((err)=>{
            // error here
         })
     }