2016-12-29 64 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"]

謝謝

相關問題