2016-12-29 88 views
0

我试图以动态方式在我的一个集合上创建一个列表,下面是一个示例。在MongoDB中动态添加具有相同密钥名称的新字段

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

})

而且我想在猫鼬做的是更新他已经上传任务的用户,什么是做到这一点的最好方法是什么?我想在年底这是什么:

{ 
    "Name" : "John", 
    "Last" : "Doh", 
    "Email" : "[email protected]", 
    "TasksUploaded" : { 
     "Task" : "Task A" 
     "Task" : "Task B" 
     "Task" : "Task H" 
     "Task" : "Task F" 
     "Task" : "Task C" 
    } 
} 

正如你所看到的任务并不总是连续的,用户可以上传到他想要的。

所有这些新的NoSQL和MongoDB都是新的东西,所以如果你能告诉我最好的做法,我将不胜感激。

这是我目前如何更新它,但会发生什么是“层”被取代,并且需要添加一个新行到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); 
    }) 
    } 
+0

单一反引号是_inline_代码。不要将它们用于多行代码块。可以使用4个空格缩进或三重反推(AKA代码击剑) –

回答

0

不,这是不可能的。对象中不能有多个具有相同名称的键。试想一下,你会如何解决它们?

看来你需要重组你的数据并使用数组。

+0

您会如何推荐这样做?我也有尽管这样做'{ “Name”:“John”, “Last”:“Doh”, “Email”:“[email protected]”, “TasksUploaded”:{ “任务A”:真 “任务B”:真 “任务H”:真 “任务F”:真 “任务C”:真 } }' – mandaman2k

+1

@ mandaman2k它可以是作为TasksUploaded [“TASKA ”, “TaskB”, “TaskC”] – Sam

0

感谢@Sam,

我修改的结构来添加上传任务表单中的数组

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

谢谢

相关问题