Название может звучать как findOne
с $set
, но почему-то я не получаю его так, как я хотел.
Для начала у меня есть схема Ticket
const Ticket = new Schema(Object.assign({
ticketNumber: { type: String, required: true },
year: { type: Schema.Types.Mixed, default: [] }, // object
}, BaseSchema), { timestamps: true });
тогда у меня есть функция для записи данных в дб.
У меня есть макет данных в приведенном ниже коде тоже
exports.writeToDB = async () => {
const data = [
{
ticketNumber: 123456789,
year: 2019,
notes: 'hello there',
more: 'there should be more fields here'
},
{
ticketNumber: 987654321,
year: 2020,
notes: 'hello there again',
more: 'there should be more fields here again'
}
];
data.forEach(d => {
console.log(d, 'ddd');
const { ticketNumber, year, ...contents } = d;
const query = { ticketNumber };
const update = {
'year': { [year]: contents }
};
const options = { upsert: true };
Ticket.updateOne(query, update, options, (err, doc) => {
console.log(doc, 'docc');
})
})
};
в схеме, есть только ticketNumber
и year
Все хорошо, чтобы начать с того, что я пытаюсь сделать, год может отличаться, и ticketNumber
останется прежним.Каждый раз, когда данные передаются и если ticketNumber
найдено, то update
в соответствии с year
, если year
не найдено, вместо этого insert
.
образец того, что будетв дБ это
{
ticketNumber: 123456789,
year: {
2019: {
notes: 'hello there',
more: 'there should be more fields here'
}
}
};
, если данные передаются с тем же годом 2019
, тогда он обновит поля notes
и more
плюс другие поля, но если данные будут переданы с другимгод, такой как 2020
, тогда то, что в дБ должно выглядеть ...
{
ticketNumber: 123456789,
year: [
2019: {
notes: 'hello there',
more: 'there should be more fields here'
},
2020: {
notes: 'hello there',
more: 'there should be more fields here'
},
]
};
Я пытался настроить мою переменную update
на такие
const update = {
$set: {'year': { [year]: contents }}
};
const update = {
'year': $set{ [year]: contents }
};
, но оба онине работают, хотя, во-первых, перезаписать весь объект (вид того, что ожидается).Второй фактически ничего не делает
Любые предложения о том, что я должен делать, или есть другая логика, которую я должен предоставить вместо использования чего-то вроде $set
?
Заранее спасибо за любую помощьи предложения.