Zrozumienie relacji i kluczy obcych w Mongoose
W MongoDB / Mongoose, jak zdefiniować relację? Myślę, że widziałem kilka sposobów, ale nie jestem pewien, czy rozumiem różnice lub kiedy używam tego. Używam Mongoose 3
ZdefiniowałemTodo
iTodoList
model, w którym związek jest oczywisty. Tak postępuje za doktoramihttp://mongoosejs.com/docs/documents.html, Zdefiniowałem klasy takie jak:
# 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
Potem próbowałem testować klasy:
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
Kiedy próbuję to zrobićTodo.find()
Nic nie dostaję, więc Model (Todo.coffee
) jest trochę zbędny? To wygląda jakTodo
są przechowywane wTodoList
, jako użytkownik, może mnie to nie obchodzić, ale zastanawiam się, jakie są implikacje? Na przykład. czy dokument będzie za duży? 1 TodoList ze zbyt wieloma Todos? Czy to ma znaczenie? Co jeśli zezwolę na zagnieżdżone Todos (nie, że chcę to zrobić tylko dla zrozumienia), czy lepiej jest wtedy przechowywać dokumenty oddzielnie? Jak mam to zrobić, jeśli tego pragnę i kiedy to zrobię?
W Mongoose 2 widziałem inną metodę, nie wiem, czy jest to możliwe w 3, coś w rodzaju używaniaObjectId
zamiast zagnieżdżonych dokumentów. Może to przechowywać osobno?