嗨,大家好像我这样的Json
{
"_id":"15b9367568b61a0a2891feef",
"date":1492826657037,
"sourceId":123",
"sessionCreationDate":1492826657037,
"sessionId":"15b9367568dcd6dcd36f7615",
"actions":[
{
"flag":"STARTED_SCROLL"
},
{
"flag":"ARTICLE_MIDDLE"
}
],
"dateClose":1492826915066
}
对于某些人的行为'数组可能不存在,所以这样的事情是可能的
{
"_id":"15b9367568b61a0a2891feef",
"date":1492826657037,
"sourceId":123,
"sessionCreationDate":1492826657037,
"sessionId":"15b9367568dcd6dcd36f7615"
}
我目前使用pymongo的查询是
db['visits'].aggregate\
(
[
{
"$match":
{
"sourceId":
{
"$exists": True,
"$ne": None
},
"date":
{
"$gt":time.time() * 1000 - (1*60*60*1000)
}
}
},
{
'$project':
{
'sourceId':1,
'actions.flag':
{
'$ifNull': ['$actions.flag', None]
}
}
}
]
)
结果操作为字典actions': {u'flag': None}
如何将其转换为像[actions': {u'flag': [None]}]
这样的字典列表?因为我想访问标志变量以插入我的数据库但在for循环中调用['actions'][0]['flag']
并不起作用,因为操作不是从mongo查询返回的那些操作项的列表,它会中断
答案 0 :(得分:1)
将其放入$ project阶段:
{
'$project':
{
'sourceId': 1,
'actions.flag':
{
'$ifNull': ['$actions.flag',
[None, None]]
}
}
}