在MongoDB/Mongoose中,如何定義關係?我認爲我已經看到了幾種方法,但我不確定我是否理解差異或什麼時候使用哪種方法。我正在使用貓鼬3瞭解Mongoose中的關係和外鍵
我已經定義了Todo
和TodoList
模型,其中關係很明顯。
list = new TodoList
name: "List 1"
todos: [
{ name: "Todo 1", desc: "Hello", dueOn: new Date(2012,10,1), completedOn: new Date(2012,10,2) }
{ name: "Todo 2" }
{ name: "Todo 3", desc: "Hello 2", dueOn: new Date(2012,10,6), completedOn: new Date(2012,10,2) }
{ name: "Todo 4" }
]
#list.todos.push { name: "Todo 5" }
console.log "List", list
list.save (err) ->
if !err
TodoList.find {}, (err, lists) ->
console.log "TODOS"
console.log lists.length, lists
done(err)
else
console.log "ERROR!!!"
done err
當我嘗試做Todo.find()
我什麼也得不到,所以模型(Todo.coffee
):所以文檔http://mongoosejs.com/docs/documents.html下面,我定義類,如:
# Todo.coffee
mongoose = require "mongoose"
todoSchema = mongoose.Schema
name: String
desc: String
dueOn: Date
completedOn: Date
module.exports = mongoose.model "Todo", todoSchema
# TodoList.coffee
mongoose = require "mongoose"
Todo = require "./Todo"
todoListSchema = mongoose.Schema
name: String
todos: [Todo.schema]
module.exports = mongoose.model "TodoList", todoListSchema
然後我試圖測試類有點多餘?它看起來像Todo
存儲在TodoList
,作爲我可能不在乎的用戶,但我不知道有什麼影響?例如。文件會變得太大嗎? 1 TodoList有太多Todos?這很重要嗎?如果我允許嵌套的Todos(不是我想爲了理解而這樣做),那麼單獨存儲文檔會更好嗎?我該如何做,如果我願意,我什麼時候做?
我看到了另外一種方法,實際上在Mongoose 2中,不知道它是否可能在3中,例如使用ObjectId
而不是嵌套文檔。也許這是分開存儲它?
Schema.Types.ObjectId具有V2兼容版本:Schema.ObjectId;這讓我感到困惑了一陣子 – 2013-05-31 18:42:18