获取MongoDB嵌入式集合文档

时间:2017-09-14 14:28:53

标签: node.js express mongodb-query

鉴于此DB集合结构:

{
        "_id" : ObjectId("59ba5bf6fa12aa446c097793"),
        "tab" : "tab1",
        "tabfeeds" : [
                {
                        "url" : "//url1",
                        "limit" : 4,
                        "type" : "text"
                },
                {
                        "url" : "//url2",
                        "limit" : 8,
                        "type" : "normal"
                }
        ]
}
{
        "_id" : ObjectId("59ba73a6fa12aa446c097794"),
        "tab" : "tab2",
        "tabfeeds" : [
                {
                        "url" : "//url5",
                        "limit" : 4,
                        "type" : "normal"
                }
        ]
}

我可以像这样获得所有“标签”集合:

router.get('/tabs', function(req, res) {
    var db = req.db;
    var collection = db.get('tabs');
    collection.find({},{},function(e,docs){
        res.json(docs);
    });
});

然后:

$.getJSON( '/feeds/tabs', function( data ) {
    $.each(data, function(){
        tablistcontent += '<th rel="' + this.tab + '">' + this.tab + '</th>';
    });
});

但是如何为每个tabfeeds列出tab的每个元素?

1 个答案:

答案 0 :(得分:2)

所以你需要做的是在你$.each电话中创建的匿名函数中创建一个参数。这将是您在阵列中的当前项目的索引。然后,您将使用该索引在名为data的数组中获取与该索引相对应的数据。

然后,您将查看您所在的对象并获取tabfeeds属性,该属性将是一个数组。然后,为每个选项卡对象遍历tabfeeds数组,并对该数据执行任何操作。

// outside up here you'll have a variable to hold tab feed data
// i'll call it tabfeedData for example
var tabfeedData = '';

// loop through all the data
$.each(data, function(tab) {

    var tabfeeds = data[tab]["tabfeeds"]; // get array of tabfeeds from data variable

    tablistcontent += '<th rel="' + this.tab + '">' + this.tab + '</th>'; 

    // loop through tabfeeds and do whatever you need to (like construct a string with attributes from the tabfeed object)
    $.each(tabfeeds, function(tabfeed) {
        tabfeedData += "<tr data-url='" + this.url + "'>";
    });

});