Понимание отношений и иностранных ключей в Mongoose

Как определить отношение в MongoDB / Mongoose? Я думаю, что есть несколько способов, которые я видел, но я не уверен, что понимаю различия или когда я использую какой. Я использую 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() Я ничего не получаю, поэтому модель (Todo.coffee) является излишним? Это выглядит какTodo хранятся вTodoList, как пользователь, мне может быть все равно, но мне интересно, каковы последствия? Например. документ станет слишком большим? 1 TodoList с большим количеством Todos? Это имеет значение? Что, если я разрешаю вложенные Todos (не то, что я хочу сделать это просто для понимания), лучше ли хранить документы отдельно? Как мне это сделать, если я так хочу и когда мне это сделать?

Я видел другой метод, на самом деле в Mongoose 2, не знаю, возможно ли это в 3, что-то вроде использованияObjectId вместо вложенных документов. Может быть, хранить его отдельно?

Ответы на вопрос(1)

Ваш ответ на вопрос