代码之家  ›  专栏  ›  技术社区  ›  user4092086

Mongoose保存方法不会忘记上一个架构

  •  0
  • user4092086  · 技术社区  · 6 年前

    我有这个方法来更新文档

    static updateData(data: any) {
        return new Promise((resolve, reject) => {
            nudgesDB.find({ _id: data.id }, (err, nudge: any) => {
                if (err) {
                    reject(err);
                }
                nudge = nudge[0];
                if (data.isRead) {
                    nudge.isRead = data.isRead;
                }
                if (data.isDelivered) {
                    nudge.isDelivered = data.isDelivered;
                }
                // if (data.deliveryResult) {
                //     if (nudge.deliveryResult && nudge.deliveryResult.length > 0) {
                //         nudge.deliveryResult.push(data.deliveryResult[0]);
                //     } else {
                //         nudge.deliveryResult = data.deliveryResult;
                //     }
    
                // }
                nudge.save( (error: any, updatedNudge: any) => {
                    if (error) return reject(error);
                    resolve(updatedNudge);
                });
            });
        });
    }
    

    即使我把代码注释掉了,它仍然可以节省交付结果

    以下是我的集合的架构:

    const nudgesSchema = new mongoose.Schema({
        sourceId: String,
        registererGUID: String,
        createdTime: Date,
        originationDateTime: Date,
        expiryDateTime: Date,
        source: Object,
        title: String,
        target: String,
        sendTo: String,
        isRead: Boolean,
        isPush: Boolean,
        isDelivered: Boolean,
        bodyType: String,
        body: {
            message: String,
        },
        priority: Number,
        intent: Object,
        deliveryResult: Object
    });
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   Hokage Sama    6 年前

    尝试添加.lean(),以便它从mongo返回纯对象结果,然后可以编辑其结果。

    static updateData(data: any) {
    return new Promise((resolve, reject) => {
        nudgesDB.find({ _id: data.id }).lean().exec((err, nudge: any) => {
            if (err) {
                reject(err);
            }
            nudge = nudge[0];
            if (data.isRead) {
                nudge.isRead = data.isRead;
            }
            if (data.isDelivered) {
                nudge.isDelivered = data.isDelivered;
            }
            // if (data.deliveryResult) {
            //     if (nudge.deliveryResult && nudge.deliveryResult.length > 0) {
            //         nudge.deliveryResult.push(data.deliveryResult[0]);
            //     } else {
            //         nudge.deliveryResult = data.deliveryResult;
            //     }
    
            // }
            nudgesDB.update({sourceId: nudge.sourceId}, {$set: nudge}).exec((err, updatedNudge) => {
                if (error) return reject(err);
                resolve(updatedNudge);
            })
        });
    });
    

    }