In MongoDB/Mongoose, come si definisce una relazione? Penso che ci siano alcuni modi in cui ho visto, ma non sono sicuro di capire le differenze o quando lo uso. Sto usando Mongoose 3Informazioni sulle relazioni e chiavi esterne in Mongoose
Ho definito il modello Todo
e TodoList
, in cui la relazione è ovvia. classi in seguito l'docs http://mongoosejs.com/docs/documents.html, ho definito come:
# 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
poi ho provato il test delle classi:
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
Quando provo a fare Todo.find()
non ottengo niente, così il modello (Todo.coffee
) è una specie di ridondante? Sembra che Todo
siano memorizzati in TodoList
, come utente a cui non mi interessa, ma mi chiedo quali sono le implicazioni? Per esempio. il documento diventerà troppo grande? 1 TodoList con troppi Todos? È importante? Cosa succede se permetto a Todos annidati (non che io voglia farlo solo per capire), è meglio memorizzare i documenti separatamente? Come posso farlo, se lo desidero e quando lo faccio?
Ho visto un altro metodo, in Mongoose 2 in realtà, non so se è possibile in 3, qualcosa di simile a utilizzare ObjectId
invece di documenti nidificati. Forse è per memorizzarlo separatamente?
Schema.Types.ObjectId ha una versione compatibilità v2: Schema.ObjectId; questo mi ha confuso per un po ' –