【发布时间】:2014-08-15 06:56:57
【问题描述】:
我有这样的文件:
{
"_id" : ObjectId("533e6ab0ef2188940b00002c"),
"uin" : "1396599472869",
"vm" : {
"0" : {
"draw" : "01s",
"count" : "2",
"type" : "",
"data" : {
"title" : "K1"
},
"child" : [
"1407484608965"
]
},
"1407484608965" : {
"data" : {
"title" : "K2",
"draw" : "1407473540857",
"count" : "1",
"type" : "Block"
},
"child" : [
"1407484647012"
]
},
"1407484647012" : {
"data" : {
"title" : "K3",
"draw" : "03.8878.98",
"count" : "1",
"type" : "SB"
},
"child" : [
"1407484762473"
]
},
"1407484762473" : {
"data" : {
"type" : "SB",
"title" : "D1",
"draw" : "7984",
"count" : "1"
},
"child" : []
}
}
}
如何根据条件(type="Block")对所有记录进行分组?
我试过了: db.ITR.aggregate({$match:{"uin":"1396599472869"}},{$project:{"vm":1}},{$group:{_id:null,r1:{$ push:"$vm"}}},{$unwind:"$r1"},{$group:{_id:null,r2:{$push:"$r1"}}},{$unwind:"$r2 "})
但是结果仍然是一个对象的形式,而不是一个数组。使用“MapReduce”我没有得到。
【问题讨论】:
-
"vm" 是一个对象而不是一个数组 "vm.child" 是一个数组。你看出区别了吗?
-
我知道“vm”不是一个数组,所以困难在于我无法获得日期字段(就像通过列表“$”中的运算符位置处理数组时一样)。如何获取文档中的“类型”字段:vm:{0:{data:{type:"Block"}}} vm->0->data->type
-
您的问题不是很清楚,您似乎在评论中提出了其他问题。像这样的“子文档”条目需要访问“精确”路径。我认为您应该进行编辑以清楚地说明您正在尝试做什么。一个很好的理由是您的示例聚合语句在第二组阶段与第一个阶段没有什么不同。所以很难确切地看到你想要什么。可能会显示预期的示例结果。
-
查询:选择 type="Block" 的所有记录。我的案例门的结果必须是这样的:“1407484608965”:{“data”:{“title”:“K2”,“draw”:“1407473540857”,“count”:“1”,“type”:“Block " }
标签: mongodb mapreduce aggregation-framework