Node.js 在MongoDB中动态添加具有相同密钥名的新字段

Node.js 在MongoDB中动态添加具有相同密钥名的新字段,node.js,mongodb,mongoose,nosql,Node.js,Mongodb,Mongoose,Nosql,我试图以一种动态的方式在我的一个收藏中创建一个列表,下面是一个例子 var user = mongoose.Schema({ "NAME": String, "LAST": String, "EMAIL": String, "TasksUploaded": {} }) 我想在mongoose中做的是用用户已经上传的任务更新用户,最好的方法是什么?最后我想要的是: { "Name" : "John", "Last" : "Doh", "Email" : "john@doh

我试图以一种动态的方式在我的一个收藏中创建一个列表,下面是一个例子

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都是新手,所以如果你能告诉我什么是最佳实践,我将不胜感激

这是我目前更新它的方式,但是发生的是“级别”被替换,并且y需要在文档中添加新行

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);
    })
  }

不,那是不可能的。一个对象中不能有多个同名键。想象一下,你会怎么称呼他们

看来您需要重新构造数据并使用数组。

多亏了@Sam

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

tasksupload[“TaskA”、“TaskB”、“TaskC”]


谢谢你

你建议怎么做?我所想到的也是这样做的
{“Name”:“John”,“Last”:“Doh”,“Email”:john@doh.com“,”TasksUploaded“:{“任务A”:真“任务B”:真“任务H”:真“任务F”:真“任务C”:真}
@mandaman2k它可以作为TasksUploaded[“任务A”、“任务B”、“任务C”]单反勾号用于内联代码。不要将它们用于多行代码块。使用4个空格的缩进或三个反勾号(也称为代码围栏)