在MongoDB中动态添加具有相同键名的新字段

时间:2016-12-29 21:51:51

标签: node.js mongodb mongoose nosql

我试图以动态的方式在我的一个集合上创建一个列表,这是一个例子。

var user = mongoose.Schema({
"NAME": String,
"LAST": String,
"EMAIL": String,
"TasksUploaded": {}

})

我想在mongoose中做的是用他已经上传的任务更新用户,最好的方法是什么?我最终想要的是:

{
    "Name" : "John",
    "Last" : "Doh",
    "Email" : "john@doh.com",
    "TasksUploaded" : {
        "Task" : "Task A"
        "Task" : "Task B"
        "Task" : "Task H"
        "Task" : "Task F"
        "Task" : "Task C"
    }
}

正如您所看到的,任务并不总是连续的,用户可以根据需要上传任务。

我对所有这些新的NoSQL和MongoDB都很陌生,所以如果你能说出最好的做法我会很感激。

这是我目前更新它的方式,但会发生的是" Level"被替换,你需要在docuemnt中添加一个新行。

User.findOneAndUpdate({ _id: id}, { $set: { 'TasksUploaded.Task': req.body.task} }, { returnNewDocument: true, new: true }, function (err, result) {
      if (err) {
        console.log("Error saving task: " + err);
        return;
      }
      console.log(result);
    })
  }

2 个答案:

答案 0 :(得分:0)

不,那是不可能的。您不能在对象中使用多个具有相同名称的键。试想一下,你会如何解决这些问题?

您似乎需要重新构建数据并使用数组。

答案 1 :(得分:0)

感谢@Sam,

我修改了我的结构,以数组的形式添加上传任务

TasksUploaded ["TaskA","TaskB","TaskC"]

谢谢