MongoDB仅在不';不存在(在Javascript中)

MongoDB仅在不';不存在(在Javascript中),javascript,mongodb,mongoose,insert,Javascript,Mongodb,Mongoose,Insert,我正在创建一个web scraper,需要将数据存储在MongoDB中。我收集一些数据并将其存储在变量调用项中。如果数据库已经存在,我也不想向数据库中添加数据。这是我的resultAnalysis.mjs文件,应该可以这样做。我应该在这段代码中更改什么,因为它不会插入数据,也会引发错误: TypeError: Cannot destructure property 'lotNumber' of 'item' as it is undefined. at file:///Users/AlainMo

我正在创建一个web scraper,需要将数据存储在MongoDB中。我收集一些数据并将其存储在变量调用项中。如果数据库已经存在,我也不想向数据库中添加数据。这是我的resultAnalysis.mjs文件,应该可以这样做。我应该在这段代码中更改什么,因为它不会插入数据,也会引发错误:

TypeError: Cannot destructure property 'lotNumber' of 'item' as it is undefined.
at file:///Users/AlainMolleyres/Desktop/scraper_V1/resultsAnalysis.mjs:48:11
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5)

问题不在于mongo,而在于
item
您是如何导入它的,以及您是否打印了
item
以检查您的答案。在我的webscraping.mjs文件中(我使用Puppeter创建我的项目),
item
将我需要的所有信息作为对象返回。在此文件中,该项仅用作函数的参数,并在index.mjs中执行。所以我真的不知道怎么了。。
mongoose
 .connect(mongoURI, { useNewUrlParser: true })
 .then(() => console.log("MongoDB connected"))
 .catch((err) => console.error(err));

export const compareAndSaveResults = (item) => {
 try {
   const Schema = mongoose.Schema;

   const lotSchema = new Schema({
     lotNumber: {},
     artistName: {},
     artworkNameOriginal: {},
     pictureUrl: {},
     artworkDate: {},
     signed: {},
     titled: {},
     technic: {},
     literature: {},
     provenance: {},
     dimension: {},
     lowEstimation: {},
     highEstimation: {},
     currency: {},
     soldPrice: {},
     lotUrl: {},
   });

   const lot = mongoose.model("lot", lotSchema);

   lot
     .find({}, function (err, lotList) {
       return lotList;
     })
     .then((lotList) => {
       if (lotList == "") {
         console.log(`A new data was created:\n${JSON.stringify(item)}`);
         const newLot = new lot(item);
         return newLot.save().catch((err) => console.log(err));
       }

       const {
         lotNumber,
         artistName,
         artworkNameOriginal,
         pictureUrl,
         artworkDate,
         signed,
         titled,
         technic,
         literature,
         provenance,
         lowEstimation,
         highEstimation,
         currency,
         soldPrice,
         dimensionInCm,
         lotUrl,
       } = item;

       const dbId = lotList[0]._id;
       const dbArtworkNameOriginal = lotList[0].artworkNameOriginal;
       const dbLotUrl = newsList[0].lotUrl;

       let catchDifference = false;

       if (dbArtworkNameOriginal !== artworkNameOriginal) {
         catchDifference = true;
       } else {
         dbLotUrl.forEach((elem, i) => {
           if (elem !== lotUrl[i]) catchDifference = true;
         });
       }

       if (catchDifference) {
         console.log("A new evidence was found, updating database...");
         mongoose.set("useFindAndModify", false);
         return News.findOneAndUpdate({ _id: dbId }, item);
       }

       console.log("File is equal to page, no lot to report");
     })
     .then(() => {
       mongoose.disconnect();
     })
     .catch((err) => console.log(err));
 } catch (err) {
   console.error(err);
 }
};

``