2
我> 8000条记录中我的数据库,这是其中的一个:的MongoDB,PyMongo - 骨料与find条件
{
"_id" : ObjectId("57599c498c39598eafb781b9"),
"_class" : "vn.cdt.entity.db.AccessLog",
"url" : "/shop/huenguyenshop/browse",
"ip" : "10.0.0.238",
"sessionId" : "86E5CF8E6D465A6EDFE7C9BF7890AA4B",
"oldSessionId" : "86E5CF8E6D465A6EDFE7C9BF7890AA4B",
"cookie" : "{\"sessionId\":\"86E5CF8E6D465A6EDFE7C9BF7890AA4B\",\"objects\":[{\"id\":\"903815555908\",\"type\":\"VIEW_SHOP\",\"count\":1}]}",
"isCookie" : true,
"createTime" : NumberLong(1464935913641),
"objectId" : "903815555908",
"type" : "VIEW_SHOP"
}
我想要做什么:
我想找到所有记录有相同的oldSessionId
(type: VIEW_ITEM
或type: BUY_ITEM
)和createTime
是最新。
我曾试图:
pipeline = ([
{"$group" : { "_id": "$oldSessionId", "count": { "$sum": 1 } }},
{"$match": {"count" : {"$gt": 1} } },
{"$project": {"oldSessionId" : "$_id", "_id" : 0} }
])
但是pipeline
给我只能sessionId
find({'createTime': {'$lt':1464419127000, '$gt':1464332727000},
'$or':[{'type':'BUY_ITEM'},{'type':'VIEW_ITEM'}]})
这find
给我的所有记录与type: VIEW_ITEM
或type: BUY_ITEM
在特定的时间。
我不知道如何添加与type
和createTime
过滤器得到我想要的。
更新 感谢@chridam对我的帮助:
如果我想添加特定日期的聚集,我可以添加这样的查询:
pipeline = \
(
[
{ "$match": {
"createTime": {"$lt":1464419127000, "$gt":1464332727000 },
"type": { "$in": ["VIEW_ITEM", "BUY_ITEM"] }
}
},
{ "$sort": { "createTime": -1, "oldSessionId": 1 } },
{
"$group":
{ "_id": "$oldSessionId",
"_class": { "$first": "$_class" },
"url": { "$first": "$url" },
"ip": { "$first": "$ip" },
"sessionId": { "$first": "$sessionId" },
"oldSessionId": { "$first": "$oldSessionId" },
"cookie": { "$first": "$cookie" },
"isCookie": { "$first": "$isCookie" },
"createTime": { "$first": "$createTime" },
"objectId": { "$first": "$objectId" },
"type": { "$first": "$type" },
}
}
]
)
你又帮我解决我的问题。非常感谢你@chridam。 '“cookie”::{“$ first”:“$ cookie”}'在“cookie”之后有两个“:”。 '“cookie”:{“$ first”:“$ cookie”}'。如果我把'.count()'放在'aggregate(pipeline)'后显示错误'TypeError:db.getCollection(...)。aggregate(...)。count不是函数: @(shell): 1:1'我可以在聚合后查看记录数量吗? –
感谢您注意到输入错误,欢迎您随时提供帮助:)至于后续查询,'aggregate()'方法没有'count()'方法,它只能在find )方法,所以你不能在'aggregate()'上应用这个函数。看起来像一个新的问题,你想要达到什么目的,你可以为它创建一个新的问题吗? – chridam
我使用pymongo并制作循环来统计文档数量。它的表演OK! –