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