Mongoose: получить новую версию документа после обновления

У нас есть реплика MongoDB, и мы читаем ее на скандалах, в бэкэнде мы используем перышки-мангусты с перьями-мангустами, а у документа есть вложенный документ. После внесения патча мы возвращаем старый вложенный документ. Мы уже установили new: true, а также попробовали returnNewDocument: true

const params = {
    mongoose: {
        new: true
    }
}

Просмотр документации по перьям-мангусту сказал мне, что мангуст в параметрах следует указывать как параметры для мангуста: https://github.com/feathersjs-ecosystem/feathers-mongoose#paramsmongoose

Но у вложенного документа все еще есть старый идентификатор. Есть ли что-то особенное для вложенных документов? Меня также смущает документация по mongoose и mongodb, потому что mongoDB сшивает только для того, чтобы знать returnNewDocument, а mongoose только new?

MongoDB: https://docs.mongodb.com/v4.2/reference/method/db.collection.findOneAndUpdate/

Мангуст: https://mongoosejs.com/docs/migration.html#findandmodify-new < / а>

Схема выглядит так:

const timeSchema = new Schema({
    weekday: {
        type: Number,
        min: 0,
        max: 6,
        required: true,
    },
    startTime: { type: Number },
    duration: { type: Number },
    eventId: { type: String },
    room: { type: String },
});

const courseSchema = getUserGroupSchema({
    description: { type: String },
    startDate: { type: Date },
    untilDate: { type: Date },
    shareToken: {
        type: String,
        unique: true,
        sparse: true,
    },

    // here is the reference
    times: [timeSchema],

    // optional information if this course is a copy from other
    isCopyFrom: { type: Schema.Types.ObjectId, default: null },
    features: [{ type: String, enum: Object.values(COURSE_FEATURES) }],
    ...externalSourceSchema,
});

person CordlessWool    schedule 20.01.2021    source источник


Ответы (1)


Простой.

Вы можете просто использовать функцию .save(), чтобы получить обновленный документ.

Пример :

...

let course = await CourseSchema.findById(id); //let's say
if(!course){
   throw new Error(...);
}

course.times.weekday = 5;
course.times.startTime = 9;
let updated = course.save();

console.log(updated); // Updated document will be printed.

...

Вы также можете использовать метод findOneAndUpdate.

person Pranesh A S    schedule 20.01.2021
comment
Привет, спасибо за ответ, но два балла. 1. Это не мой собственный код, и в настоящее время используется перья-моногуз, поэтому я не мог напрямую вызвать модель или схему. Я также думал обойти это и просто подключиться к Schme, но на первом этапе я хотел сохранить рабочий процесс этой службы. 2. findOneAndUpdate вернет старый объект, если не задан новый или returnNewDocument, как написано в документации. Я думаю, что перья-мангусты делают findOneAndUpdate на заднем плане. Но как передать параметры, чтобы получить новый объект. - person CordlessWool; 21.01.2021