In MongoDB/Mongoose, wie definiere ich eine Beziehung? Ich denke, es gibt ein paar Wege, die ich gesehen habe, aber ich bin mir nicht sicher, ob ich die Unterschiede verstehe oder wann ich welche verwende. Ich verwende Mungo 3Beziehungen und Fremdschlüssel in Mongoose verstehen
Ich habe definiert Todo
und TodoList
Modell, wo die Beziehung offensichtlich ist. So nach dem docs http://mongoosejs.com/docs/documents.html, ich habe definierten Klassen wie:
# 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
Dann habe ich versucht, die Klassen zu testen:
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
Wenn ich versuche, Todo.find()
zu tun, ich habe nichts bekommen, so das Model (Todo.coffee
) ist irgendwie überflüssig? Es sieht aus wie Todo
sind in TodoList
gespeichert, als Benutzer kann mich nicht interessieren, aber ich frage mich, was sind die Auswirkungen? Z.B. Wird das Dokument zu groß? 1 TodoList mit zu vielen Todos? Spielt das eine Rolle? Was ist, wenn ich verschachtelte Todos erlaube (nicht, dass ich es nur zum Verständnis machen möchte), ist es besser, Dokumente getrennt zu speichern? Wie mache ich das, wenn ich es wünsche und wann mache ich es?
Ich sah eine andere Methode, in Mungo 2 tatsächlich, weiß nicht, ob es in 3 möglich ist, etwas wie ObjectId
statt verschachtelte Dokumente verwenden. Vielleicht ist das separat zu speichern?
Schema.Types.ObjectId hat eine v2 Kompatibilität Version: Schema.ObjectId; Das hat mich für eine Weile verwirrt –