one multiple many foreign array mongodb join foreign-keys mongoose

mongodb - multiple - Entendiendo las relaciones y las claves externas en Mangosta



multiple populate mongoose (1)

Todavía soy nuevo en Node, Mongoose y Mongo, pero creo que puedo abordar al menos parte de tu pregunta. :)

Tu método actual es el mismo que intenté hacer al principio. Básicamente, termina almacenándolo de forma muy similar a esto (escrito en JS, ya que no sé CoffeeScript):

var todoListSchema = new mongoose.Schema({ name: String, todos: [{ name: String, desc: String, dueOn: Date, completedOn: Date }] });

Más tarde encontré este método, que es lo que estaba buscando, y creo que lo que pretendías era:

var todoListSchema = new mongoose.Schema({ name: String, todos: [{ type: mongoose.Schema.Types.ObjectId, ref: ''Todo'' //Edit: I''d put the schema. Silly me. }] });

Esto almacena una matriz de ObjectIds, que luego puede cargar utilizando la Query#populate en Mongoose.

No conozco las implicaciones técnicas, pero tiene más sentido en mi cerebro si las mantengo separadas, así que eso es lo que estoy haciendo. :)

Edición: Aquí hay algunos documentos oficiales que pueden ser útiles: http://mongoosejs.com/docs/populate.html

En MongoDB / Mongoose, ¿cómo defino una relación? Creo que hay algunas formas en las que he visto, pero no estoy seguro de entender las diferencias o cuándo las uso. Estoy usando mangosta 3

He definido el modelo Todo y TodoList , donde la relación es obvia. Así que siguiendo los documentos http://mongoosejs.com/docs/documents.html , he definido clases como:

# 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

Entonces intenté probar las clases:

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

Cuando intento hacer Todo.find() no obtengo nada, ¿el modelo ( Todo.coffee ) es un poco redundante? Parece que Todo está almacenado en TodoList , como un usuario no me importa, pero me pregunto cuáles son las implicaciones? P.ej. ¿El documento será demasiado grande? 1 TodoList con demasiados Todos? ¿Eso importa? ¿Qué pasa si permito a Todos anidados (no es que quiera hacerlo solo por comprensión), es mejor almacenar los documentos por separado? ¿Cómo hago eso, si así lo deseo, y cuándo lo hago?

Vi otro método, en Mongoose 2 en realidad, no sé si es posible en 3, algo así como usar ObjectId lugar de documentos anidados. Tal vez eso es para almacenarlo por separado?