访问嵌套在数组对象中的字典中的数组

时间:2013-12-20 23:25:49

标签: mongodb

我创建了一个聚合查询,它使用'parts'键作为'_id',并返回数组中关联的所有'子部分'数字。聚合查询的输出是不可取的,因为我得到包含74755个字典对象的数组'result'。每个对象包含一个用于_id的int 32和一个用于'#associated_subparts'的数组。我可以通过以下方式访问子元素:

db.agg_result.find({}, {_id: 0, result: { $slice: [0,2]}})      

但这只是一种定位方法。我尝试了嵌套的$ elemMatch和$ all查询的变种但没有成功。我希望能够返回id为468183339的对象。我可能会错误地投射我的原始聚合查询,但我想返回一个没有嵌套的集合,因此集合中的每个对象都是这些部分之一>子部分对象。

示例查询:

var agg_out = db.collection.aggregate( { $group :{ '_id' : "$parts#",
    'associated_subparts#' : { $addToSet : "$sub_part" }}});
db.agg_result.insert(agg_out);
db.agg_result.find();

示例输出:

{
    "_id" : ObjectId("52b4c4c6e984c01d69ff176f"),
    "result" : [ 
        {
            "_id" : 468183339,
            "associated_subparts#" : [ 
                -1408237536
            ]
        }, 
        {
            "_id" : 782155933,
            "associated_subparts#" : [ 
                -1408237536
            ]
        }, 
        {
            "_id" : 1583659973,
            "associated_subparts#" : [ 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535, 
                -1408237535
            ]
        }
]
}

1 个答案:

答案 0 :(得分:1)

如果我这次正确理解你的问题,填充你的agg_result集合的正确方法是在你的agg_result集合中插入'result'索引的每个子项之前迭代聚合查询结果文档的结果字段,喜欢:

agg_out.result.forEach(function(x){db.agg_result.insert(x);});