Aquí está mi código de prueba que no puedo entender por qué no está funcionando, ya que es muy similar a la prueba 'populating multiple children of a sub-array at a time'.Mangosta poblar
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
mongoose.connect('mongodb://localhost/testy');
var UserSchema = new Schema({
name: String
});
var MovieSchema = new Schema({
title: String,
tags: [OwnedTagSchema]
});
var TagSchema = new Schema({
name: String
});
var OwnedTagSchema = new Schema({
_name: {type: Schema.ObjectId, ref: 'Tag'},
_owner: {type: Schema.ObjectId, ref: 'User'}
});
var Tag = mongoose.model('Tag', TagSchema),
User = mongoose.model('User', UserSchema),
Movie = mongoose.model('Movie', MovieSchema);
OwnedTag = mongoose.model('OwnedTag', OwnedTagSchema);
User.create({name: 'Johnny'}, function(err, johnny) {
Tag.create({name: 'drama'}, function(err, drama) {
Movie.create({'title': 'Dracula', tags:[{_name: drama._id, _owner: johnny._id}]}, function(movie) {
// runs fine without 'populate'
Movie.find({}).populate('tags._owner').run(function(err, movies) {
console.log(movies);
});
});
})
});
de error producida es
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Cannot call method 'path' of undefined
at /Users/tema/nok/node_modules/mongoose/lib/model.js:234:44
actualización
se deshizo de OwnedTag y reescribió MovieSchema como el código
var MovieSchema = new Schema({
title: String,
tags: [new Schema({
_name: {type: Schema.ObjectId, ref: 'Tag'},
_owner: {type: Schema.ObjectId, ref: 'User'}
})]
});
Trabajando https://gist.github.com/1541219
No, el mismo resultado :-( – spacevillain
Ah. En realidad, regrese a su modelo original. Está usando '.populate' pero está usando un subdocumento para' tags', no una referencia. No lo hago esperamos que funcione, estamos cada vez más lejos de la solidez de una base de datos NoSQL, pero, tal vez esto funcione, consulte el segundo intento adicional anterior. – danmactough
Esto rompe todo :-(No obtengo lo que es la diferencia entre https://github.com/LearnBoost/mongoose/blob/master/test/model.ref.test.js#L1109 Tal vez usted me puede ayudar a verlo? – spacevillain