Каков правильный способ обновления данных объекта в MongoDB при использовании ключей переменных для значений объекта? - PullRequest
0 голосов
/ 17 июня 2020

Первая публикация здесь.

У меня есть схема и модель Mon goose, показанные ниже:

const DataSchema = new Schema(
  {
    name:{type: String, default: ""},
    task: {type: Schema.Types.Mixed, default: {}}
  },
  { timestamps: true, _id: true, minimize: false, strict: false }
);

const Data = mongoose.model("Data", DataSchema);

Теперь, когда профиль пользователя создается с использованием параметра «name», я бы получил следующий ответ в качестве примера :

{"success: true, "data":[{"name":"Eminem","_id":"5ee8468316a2ea32bcfbf411","task":{},"createdAt":"2020-06-16T04:11:47.441Z","updatedAt":"2020-06-16T04:11:47.441Z","__v":0}]}

Следующее действие - обновить объект задачи на основе ввода пользователя для «taskName». Например: если пользователь вводит «работа» как «taskName», я хочу, чтобы объект задачи был обновлен как "task": {work:{}}.

Для этого я использовал метод ниже, но он никогда не обновляет объект «задача». Кто-нибудь может увидеть, что я делаю не так?

var id = "5ee8468316a2ea32bcfbf411"
var taskName="work"
var key = 'task.'+taskName
var push = {}
push[key]={}

Data.findByIdAndUpdate({_id:id}, push, (err,data)=> {
      if(err) throw err
  }
);

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 17 июня 2020

Должно получиться примерно так:

let id = "5ee8468316a2ea32bcfbf411"
let taskName="work"
Data.findByIdAndUpdate(id,
      {$set:{task:{[taskName]:{}}}, 
      (err,data)=> {
      if(err) throw err
  }
)
...