NodeJS猫鼬更新文档

时间:2020-03-29 09:28:27

标签: node.js mongodb mongoose

我正在尝试使用“猫鼬”这样的方式来更新或创建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 ...”

我做错了什么?

关于...

1 个答案:

答案 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