MongoDB/Mongooseでは、関係をどのように定義しますか?私は見たことがいくつかあると思いますが、その違いを理解していないか、いつどのようなものを使うのか分かりません。私はモンゴース3を使用していますMongooseの関係と外部キーの理解
私はTodo
とTodoList
モデルを定義しました。その関係は明らかです。私はTodo.find()
をしようとすると、私は何を取得
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.coffee
):その後、私はクラスをテストしようとした
# 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
:だからドキュメントhttp://mongoosejs.com/docs/documents.html以下、私のようなクラスを定義しました冗長ですか?それはTodo
のように私は気にしないかもしれないユーザーとして、TodoList
に格納されているようだが、私は何を意味するのだろうか?例えば。ドキュメントが大きくなりすぎますか? 1 Todoリストが多すぎますか?それは重要ですか?もし私が入れ子になっているTodosを許可すれば(私はそれを理解したいとは思っていません)、文書を別々に保管するほうがいいですか?もし私が望むなら、それをどうすればできますか?それはいつしますか?
私はMongoose 2では実際には3で可能な場合は別の方法を見ました。ネストされたドキュメントの代わりにObjectId
を使用するようなものです。別にそれを保管することはありますか?
Schema.Types.ObjectIdはv2の互換バージョンがあります:ここでは役に立つかもしれないいくつかの公式ドキュメントでSchema.ObjectId。これは私がしばらく混乱していた –