在 MongoDB/Mongoose 中,如何定义关系?我认为我见过几种方法,但我不确定我是否理解其中的差异或何时使用哪种方法。我正在使用猫鼬 3
我已经定义Todo
和TodoList
建模,关系很明显。因此,按照文档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
然后我尝试测试这些类:
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()
,我什么也得不到,所以 Model ( Todo.coffee
) 有点多余?看起来Todo
存储在 中TodoList
,作为用户我可能不在乎,但我想知道这意味着什么?例如。文档会变得太大吗?1 待办事项过多的待办事项列表?这有关系吗?如果我允许嵌套的 Todos 怎么办(不是我想这样做只是为了理解),那么单独存储文档会更好吗?如果我愿意,我该怎么做?我什么时候做?
我实际上在 Mongoose 2 中看到了另一种方法。我不知道,在 3 中是否有可能。使用ObjectId
而不是嵌套文档之类的东西。也许那是分开存放?