0

我有一组物品,它们都附有序列号和其他字段。一个文件看起来像这样

{
    _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
          }
     })
}

4

2 回答 2

0

而不是循环所有集合,为什么不只获取一个具有该序列号的集合:

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
      }
 })
}
于 2019-09-04T09:07:38.787 回答
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
         })
     }
于 2019-09-04T11:38:27.383 回答