Tengo dos Esquema definido de la siguiente manera:

var WorksnapsTimeEntry = BaseSchema.extend({
 student: {
     type: Schema.ObjectId,
     ref: 'Student'
 },
 timeEntries: {
     type: Object
 }
 });

var StudentSchema = BaseSchema.extend({
firstName: {
    type: String,
    trim: true,
    default: ''
    //validate: [validateLocalStrategyProperty, 'Please fill in your first name']
},
lastName: {
    type: String,
    trim: true,
    default: ''
    //validate: [validateLocalStrategyProperty, 'Please fill in your last name']
},
displayName: {
    type: String,
    trim: true
},
municipality: {
    type: String
    }
});

Y me gustaría bucle por cada estudiante y mostrar el tiempo de las entradas. Hasta ahora tengo este código que obviamente no es correcto ya que yo aún no sé cómo me puedo unir a WorksnapTimeEntry esquema de la tabla.

Student.find({ status: 'student' })
        .populate('student')
        .exec(function (err, students) {
            if (err) {
                return res.status(400).send({
                    message: errorHandler.getErrorMessage(err)
                });
            }
            _.forEach(students, function (student) {
               //show student with his time entries....
            });
            res.json(students);
        });

Sabe de ¿cómo puedo conseguir tal cosa?

Lo están haciendo al revés. Desea .populate() el «estudiante» ruta de acceso de la WorksnapTimeEntry como una fuente. Si usted está esperando es al revés, a continuación, incluir las referencias como una «matriz» en cada Student o consulta y combinar manualmente, buscando el «estudiante» en el WorksnapTimeEntry. El .populate() método sólo puede trabajar con referencias «ya almacenados» en el objeto.
la cosa que estoy haciendo de esta manera es que primero quiero mostrar todos los estudiantes en la tabla y, a continuación, mostrar las entradas de tiempo para cada uno de ellos, de los que no puedo mostrar timeEntries ya que son millones en la mesa… yo estaba tratando de hacer algo como esto sumando a que el estudiante Esquema, pero todavía no parece de trabajo: timeEntries: [{ tipo: Esquema.Tipos.ObjectId, ref: ‘WorksnapsTimeEntry’}] Y, a continuación,.rellenar («estudiante») será igual .rellenar(‘timeEntries’), podría u dime por qué esto no está funcionando?
No sería WorksnapsTimeEntry.find().populate("students").exec({..}) desde "students" es un «camino» en ese modelo, y un «camino» es lo que se oferta como un argumento a .populate(). Si desea un formato diferente, entonces usted tendría que volver a trabajar los resultados. O como ya he dicho, que usted necesita para crear las referencias a cada WorksnapTimeEntry «dentro» de la Student modelo de los documentos en su lugar. Que es cómo .populate() obras. Su pensamiento actual es a la inversa.
si hago WorksnapsTimeEntry.find().rellenar(«estudiantes»).exec({..}) a continuación se le mostrará me milions de los estudiantes para cada entrada de tiempo que yo no quiero eso. No hay ningún método que puede utilizar el Estudiante.buscar y, a continuación, acaba de unirse a todas las entradas de tiempo a la cual pertenece el estudiante, mediante la adición a la Estudiante Modelo de la WorksnapTimeEntry matriz ref o algo?
De hecho, quiero que esta: O como ya he dicho, que usted necesita para crear las referencias a cada WorksnapTimeEntry «dentro» de la Estudiante modelo de los documentos en su lugar.

OriginalEl autor Hisni Fazlija | 2016-04-23

Dejar respuesta

Please enter your comment!
Please enter your name here