обновление коллекции на основе другого поля коллекции

#node.js #mongodb #express #mongoose

Вопрос:

У меня есть 2 схемы, это схема родительской коллекции:

 const TimesheetSchema = Schema({
    managersComment: {
        type: String,
    },
    weekNum: {
        type: Number,
    },
    year: {
        type: Number,
    },
    user: { type: Schema.Types.ObjectId, ref: userModel },
    status: {
        type: String,
        enum: ["Saved", "Submitted", "Approved", "Rejected"],
    },
    data: [{ type: Schema.Types.ObjectId, ref: TimesheetIndividualData }]
});
 

Это схема дочерней коллекции

 const TimesheetDataSchema = new Schema(
    {
        workingDate: {
            type: Date,
        },
        dayVal: {
            type: Number,
        },
        user: { type: Schema.Types.ObjectId, ref: userModel },
        parentId: { type: String },
        status: { type: String }
    },
    { timestamps: true }
);
 

Я хочу обновить все status поля на TimesheetDataSchema(child collection) основе parentId , вот parentId в основном _id из TimesheetSchema (parent collection) .

Не знаю, как это сделать с помощью запроса в mongoose/mongo, поэтому я пытаюсь сделать это с помощью кода в express.

Пожалуйста, помогите.

Ответ №1:

Как насчет db.timeSheetData.updateMany({"parent_id": ObjectId(_id)}) этого ?

(Правка)

  • Извлеките данные из TimeSheetSchema коллекции.
  • Повторите его и для каждого data получите _id свое .
  • db.timeSheetsData.updateMany({"parent_id": _id}, {"$set": {"status": data.status}

Комментарии:

1. ПРИВЕТ, я хочу взять значение поля статуса TimesheetSchema и обновить это значение в TimesheetDataSchema базе данных при условии TimesheetSchema ._id === TimesheetDataSchema .parentId