Mongodb显示嵌套的引用对象

时间:2016-07-13 14:53:08

标签: node.js mongodb mongoose

我有mongodb的以下架构(对于我的平均堆栈应用程序)。

var helpSchema = new Schema({
    //_id: Number,
    description: String,
    summary: String,
    flows: [{ type: Schema.Types.ObjectId, ref: 'Flow' }]
});


var flowSchema = new Schema({
    _problem: { type: Number, ref: 'Help' },
    name: String,
    steps: [{ type: Schema.Types.ObjectId, ref: 'Step' }]
});

我正在插入数据库,如下所示:

var help = new models.Help();
        help.description = 'description';
        help.summary = 'summary';

        var flow = new models.Flow();
        flow.name = 'name';

        help.flows.push(flow);
 help.save(function(err) {
...
}

将值插入db并且我可以查询。 db.helps.find(); 返回结果

{ "_id" : ObjectId("5786520f580cc96c31c90769"), "summary" : "summary", "description" : "description", "flows" : [ ObjectId("5786520f580cc96c31c9076a") ], "__v" : 0 }

现在我可以从命令行查询并查看流数组中对象内的值吗?我搜索并发现可以查询嵌套对象中的字段。但是我可以在命令行中显示这个值吗?

1 个答案:

答案 0 :(得分:1)

要仅请求数组中字段flows的值,您可以使用map。 它需要作为输入参数:

  

应用于光标访问的每个文档的函数。

这会给你:

flows_id = function(doc) { return doc.flows; }
db.helps.find().map(flows_id)

要从ObjectId值中提取值,您需要为每个项目调用valueOf

flows_id = function(doc) {
    var array = [];
    doc.flows.forEach(function(myDoc){
        array.push(myDoc.valueOf());
    });
    return array;
}

db.helps.find().map(flows_id)