我有以下示例
{
"request" : [
{
"bytesSent" : "6605",
"bytesRecieved" : "1987",
"currentVisit" : "1384766024",
"lastVisit" : "1384766024"
},
{
"bytesSent" : "6605",
"bytesRecieved" : "1987",
"currentVisit" : "1384766024",
"lastVisit" : "1384766024"
}
],
uuid :"b90fb200-5031-11e3-9b59-2f102c87ef20-13decb4fb6fd1"
}
我想根据上述文档中currentVisit
数组中的lastVisit
和request
来汇总uuid。
我想使用uuid将普通查询转换为聚合。
db.collection.find({"request.currentVisit":{$gte:"1384766024",$lte:"1384766024"}});
任何帮助都会很棒。
答案 0 :(得分:0)
以下聚合查询效果很好。
db.collection.aggregate({$unwind:"$request"},{$match:{"request.currentVisit":{$gte:"1384766024",$lte:"1384766024"}}},{$group:{_id:"$uuid"}});
将请求数组展开到普通文档。
根据currentVisit
文档中的request
,使用$ match匹配时间戳字段。
使用uuid
字段对文档进行分组。
答案 1 :(得分:-2)
请求字段是一个数组,所以没有request.currentVisit,试试这个:
{ request:{$elemMatch:{currentVisit:{$gte:"1384766024",$lte:"1384766024"}}} }