2014-04-09 46 views
0

我正在學習mongodb。假設有兩個表並且它們是相關的。例如像這樣 -如何在mongoDB中使用json輸入多個表數據

1st table has 
    First name- Fred, last name- Zhang, age- 20, id- s1234 
2nd table has 
    id- s1234, course- COSC2406, semester- 1 
    id- s1234, course- COSC1127, semester- 1 
    id- s1234, course- COSC2110, semester- 1 

如何在mongo db中插入數據?我寫的這個樣子,不知道是不是正確與否 -

db.users.insert({ 
    given_name: 'Fred', 
    family_name: 'Zhang', 
    Age: 20, 
    student_number: 's1234', 
    Course: ['COSC2406', 'COSC1127', 'COSC2110'], 
    Semester: 1 
}); 

預先感謝您

+0

問題是什麼?它工作還是不工作?我認爲它的確如此。 –

+0

對不起,問題是 - 如果學期不同,那我該怎麼做? – user3515895

回答

0

這將是一個假設您想要的模型是什麼具有「student_number」和「學期」因爲基本上這些條目是唯一的標識符。但是,如果不在代碼中累積數組內容,將會有這種方法。

您可以使用.update()方法中的upsert功能,只需在語句中的其他幾個操作符的幫助下。

我會假設你是各種各樣的循環中去這一點,所以在右側值的一切其實是一個變量:

db.users.update(
    { 
     "student_number": student_number, 
     "Semester": semester 
    }, 
    { 
     "$setOnInsert": { 
      "given_name": given_name, 
      "family_name": family_name, 
      "Age": age    
     }, 
     "$addToSet": { "courses": course } 
    }, 
    { "upsert": true } 
) 

這確實在「更新插入」操作什麼是首先查找對於您的集合中可能存在的符合給定查詢條件的文檔。在這種情況下,帶有當前「學期」值的「student_number」。

當那場比賽被發現,該文件僅僅是「更新」。因此,這裏所做的是使用$addToSet運算符來將唯一值「更新」到「courses」數組元素中。這似乎有道理具有獨特的課程,但如果不是你的話,那麼當然你也可以簡單地使用$push操盤手。所以這就是您希望每次都發生的操作,無論文檔是否「匹配」。

在不「匹配」的文件被發現的情況下,一個新的文件將被插入到集合中。這就是$setOnInsert運營商進來。

所以這部分的一點是,它會可以在創建一個新的文件,因爲沒有必要更新每一次相同的信息這些領域的調用。除此之外,您在查詢條件中指定的字段具有明確的值,因此「upsert」的行爲是在新創建的文檔中自動創建具有這些值的字段。

創建一個新文檔後,那麼接下來的「更新插入」使用同樣的標準語句當然只「更新」現在現有的文檔,因此只將被添加新的課程信息。

這樣的總體工作讓你「預連接」從源的兩個表與適當的查詢。然後,您只需循環結果,而無需編寫用於將正確條目分組在一起的代碼,只需讓MongoDB爲您完成累積工作即可。

當然,你永遠可以編寫代碼來此做自己,這將導致更少的「旅行」到數據庫中,以便插入您已經累積的記錄是否會滿足您的需求。作爲最後一點,雖然它需要一些額外的複雜性,但使用新引入的"batch updates"功能可以獲得更好的性能。爲此,您的MongoDB服務器版本將需要2.6或更高版本。但是,這仍然是減少邏輯的一種方式,同時維持較少的實際「通過線路」寫入數據庫。

0

你可以有兩個獨立的集合 - 一個與學生的詳細信息和其他課程,並與「ID」鏈接。 否則您可以在陣列的形式與課程作爲內部文檔中的單個文件如下:

{ 
"FirstName": "Fred", 
"LastName": "Zhang", 
"age": 20, 
"id": "s1234", 
"Courses": [ 
    { 
     "courseId": "COSC2406", 
     "semester": 1 
    }, 
    { 
     "courseId": "COSC1127", 
     "semester": 1 
    }, 
    { 
     "courseId": "COSC2110", 
     "semester": 1 
    }, 
    { 
     "courseId": "COSC2110", 
     "semester": 2 
    } 
] 

}

相關問題