javascript - MongoDB 仅在数据不存在时插入数据(在 Javascript 中)
问题描述
我正在创建一个网络爬虫,我需要将我的数据存储在 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)
这是我的代码
结果分析.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);
}
};
``
解决方案
推荐阅读
- typescript - 尝试使用angularfire以角度加入一对多的firebase文档
- c++ - 无法发现使用另一个类 C++ 的“朋友”函数的错误
- c# - 获取所有相关食谱,无需过滤位置
- modulo - 为什么 BlueJ 说模数不是语句?
- python - Convert json format to dataframe frame
- python - Get source from image from webpage
- c - 指针作为 for 循环中的索引值
- python - 如何制作列表列表中元素的有序频率列表
- gradle - Gradle: automatically choose GRADLE_HOME depending on the project
- django - Django 使用 MySQL DB 搜索日期字段