我使用Mongoose.js,无法解决3级层次结构文档的问题。
有2种方法可以做到。
首先 -没有裁判。
C = new Schema({ 'title': String, }); B = new Schema({ 'title': String, 'c': [C] }); A = new Schema({ 'title': String, 'b': [B] });
我需要出示C记录。仅知道_id的C,如何填充/找到它?
我曾尝试使用:
A.findOne({'b.c._id': req.params.c_id}, function(err, a){ console.log(a); });
但是我不知道如何从returnet得到一个对象,我只需要c对象。
其次,如果使用裁判:
C = new Schema({ 'title': String, }); B = new Schema({ 'title': String, 'c': [{ type: Schema.Types.ObjectId, ref: 'C' }] }); A = new Schema({ 'title': String, 'b': [{ type: Schema.Types.ObjectId, ref: 'B' }] });
如何填充所有B,C记录以获取层次结构?
我试图使用这样的东西:
A .find({}) .populate('b') .populate('b.c') .exec(function(err, a){ a.forEach(function(single_a){ console.log('- ' + single_a.title); single_a.b.forEach(function(single_b){ console.log('-- ' + single_b.title); single_b.c.forEach(function(single_c){ console.log('--- ' + single_c.title); }); }); }); });
但是它将为single_c.title返回undefined。我有填充的方法吗?
Thanks.
在Mongoose 4中,您可以跨多个级别填充文档:
假设您有一个User模式,该模式可以跟踪用户的朋友。
var userSchema = new Schema({ name: String, friends: [{ type: ObjectId, ref: 'User' }] });
首先populate(),您可以获取用户朋友列表。但是,如果您还 希望用户的朋友成为朋友,该怎么办?在这种情况下,您可以指定一个populate选项来告诉猫鼬填充friends所有用户朋友的数组:
populate()
populate
friends
User. findOne({ name: 'Val' }). populate({ path: 'friends', // Get friends of friends - populate the 'friends' array for every friend populate: { path: 'friends' } });
Taken from: http://mongoosejs.com/docs/populate.html#deep-populate