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()
も得られないので、モデル(Todo.coffee
)は冗長ですか?Todo
に保存されているように見えますTodoList
が、ユーザーとしては気にしないかもしれませんが、どのような影響があるのでしょうか。例えば。ドキュメントが大きくなりすぎますか?Todoが多すぎる1つのTodoList?それは重要ですか?ネストされたTodoを許可した場合(理解のためだけにそれを実行したいわけではありません)、ドキュメントを個別に保存する方がよいでしょうか?私がそう望むなら、どうすればそれを行うことができますか、そしていつそれをしますか?
私は実際にマングース2で別の方法を見ました。3.で可能かどうかはわかりませんObjectId
。ネストされたドキュメントの代わりに使用するようなものです。多分それはそれを別々に保存することですか?