在MongoDB中/猫鼬,我怎么定义一个关系? 我觉得有我已经看到了一些办法,但我不知道我理解的差异还是当我使用它。 我使用的猫鼬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()
我什么也得不到,所以模型( Todo.coffee
)是一种多余的? 它看起来像Todo
存储在TodoList
,因为我可能不关心用户,但我不知道会造成什么影响? 例如。 将文件得到过大? 1个TodoList的太多托多斯? 请问是怎么回事? 如果我允许嵌套托多斯(不,我想要做的ITM只是为了理解),是它更好地存储文档分开呢? 我该怎么办,如果我愿意的话,当我该怎么办呢?
我看到了另一种方法,在猫鼬2实际上,在3,如果可能不知道,像使用ObjectId
嵌套文档代替。 也许这就是要分开存放?