Метод сохранения Mongoose не забывает последнюю схему - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть этот метод для обновления документа

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);
            });
        });
    });
}

Я пытаюсь передать новую структуру deliveryResult, которая является массивом, но по какой-то причине впервые в DeliveryResult все еще есть старая схемадаже после того, как я закомментировал код, он все еще сохраняет поставляемый результат

вот схема для моей коллекции:

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 Ответ

0 голосов
/ 30 ноября 2018

Попробуйте добавить .lean (), чтобы он возвращал чистый результат объекта из Монго, затем вы можете редактировать его результат.

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);
        })
    });
});

}

...