我正在尝试使用“猫鼬”这样的方式来更新或创建MongoDB集合中的文档:
this.statsModel.findOne(
{product_id: requestData.ean},
).then((stats: mongoose.Schema) => {
const productId: string = requestData.ean;
// Update stats with the new scan...
const beforeStats: mongoose.Schema = stats;
const scan: any = {
coords: {
lat: requestData.lat,
lon: requestData.lon,
},
at: new Date(),
};
if (stats) {
stats.scans.push(scan);
stats.update();
} else {
const newStat = new this.statsModel();
newStat._id = requestData.ean;
newStat.product_id = requestData.ean;
newStat.scans = [scan];
newStat.purchases = [];
newStat.save();
}
此代码运行时,如果有统计文档,则“ scans”属性中不会出现新元素。
如果未找到统计文档,则会正确创建该文档。
我试图将“ update()”方法更改为“ save()”方法,但是,这样,我遇到了“ Version error No matching document for the id ...”
我做错了什么?
关于...
答案 0 :(得分:0)
最后,更新承诺给Model的统计信息的类型,而不是mongoose.Schema:
this.statsModel.findOne(
{product_id: requestData.ean},
).then((stats: Model<Stats>) => {
const productId: string = requestData.ean;
// Update stats with the new scan...
const beforeStats: mongoose.Schema = stats;
const scan: any = {
coords: {
lat: requestData.lat,
lon: requestData.lon,
},
at: new Date(),
};
if (stats) {
stats.scans.push(scan);
stats.save();
} else {
const newStat = new this.statsModel();
newStat._id = requestData.ean;
newStat.product_id = requestData.ean;
newStat.scans = [scan];
newStat.purchases = [];
newStat.save();
}
因此save()方法可以正常工作...
Thx