我用mongoose .js,无法解决三级层次 struct 文档的问题.

有两种方法.

First-没有裁判.

C = new Schema({
    'title': String,
});

B = new Schema({
    'title': String,
    'c': [C]
});

A = new Schema({
    'title': String,
    'b': [B]
});

我需要出示C记录.我只知道C的id,如何填充/找到它?

我试着使用:

A.findOne({'b.c._id': req.params.c_id}, function(err, a){
    console.log(a);
});

但是我不知道如何从退货中得到一个我需要的东西.

Second如果使用参考文献:

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记录以获得层次 struct ?

我试着用这样的东西:

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);
            });
        });
    });
});

但它将返回未定义的单c标题.我有办法填充它吗?

谢谢

推荐答案

在Mongoose 4中,您可以跨多个级别填充文档:

假设你有一个User模式来跟踪用户的朋友.

var userSchema = new Schema({
  name: String,
  friends: [{ type: ObjectId, ref: 'User' }]
});

首先,populate()可以让你得到一个用户朋友列表.但是如果你也想要一个用户的朋友的朋友呢?在这种情况下,您可以指定一个populate选项,告诉mongoose填充用户所有好友的friends数组:

User.
  findOne({ name: 'Val' }).
  populate({
    path: 'friends',
    // Get friends of friends - populate the 'friends' array for every friend
    populate: { path: 'friends' }
  });

摘自:http://mongoosejs.com/docs/populate.html#deep-populate

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

MongoDB.ArrayFilters出错:在路径中找不到标识符';elem';的数组筛选器

如何对嵌套在另一个数组中的数组中的字段执行查找?

数组中字符串的Mongo查询集合和推送到新数组嵌套对象

spring-data-mongodb 上的 TopN 聚合

MongoDB 聚合 $match 阶段与条件查询

具有最佳插入/秒性能的数据库?

为什么 local.oplog.rs 上每隔几分钟的活动就会锁定 mongo 客户端

Meteor 如何接收对 MongoDB 查询结果的更新?

Mongodb:查询嵌套在数组中的json对象

如何使用 mongoexport 导出排序数据?

Spring Mongo 条件查询两次相同的字段

将 MongoDB 数据库复制到本地计算机

NoSQL:MongoDB 或 BigTable 并不总是 Available意味着什么

mongodb nodejs - 转换圆形 struct

MongoDB 嵌套 OR/AND 在哪里?

如何在 MongoDB Map-reduce 映射函数中使用变量

在 MongoDB 中为现有用户更改密码

如何向 mongodb 2.6 添加身份验证?

无法在 mac os 10.9 上安装 mongodb php 驱动程序