2017-08-02 18 views
0

嗨,大家好我有一個JSON這樣如何返回null元素的數組,如果數組不MongoDB中使用存在pymongo

{ 
    "_id":"15b9367568b61a0a2891feef", 
    "date":1492826657037, 
    "sourceId":123", 
    "sessionCreationDate":1492826657037, 
    "sessionId":"15b9367568dcd6dcd36f7615", 
    "actions":[ 
    { 
     "flag":"STARTED_SCROLL" 
    }, 
    { 
     "flag":"ARTICLE_MIDDLE" 
    } 
    ], 
    "dateClose":1492826915066 
} 

怎麼過一些ID是「操作」數組可能不存在藏漢所以這樣的事情是可能的

{ 
"_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] 
           } 

          } 
         } 
        ] 
     ) 

導致行動作爲字典ionary actions': {u'flag': None}我怎麼將它轉換爲像[actions': {u'flag': [None]}]字典的名單?因爲我想訪問標誌變量插入到我的分貝,但在for循環調用['actions'][0]['flag']不起作用,因爲行動不是從mongo查詢返回的那些行動項目的列表,它打破

回答

1

把這個在你的$項目階段改爲:

{ 
    '$project': 
     { 
      'sourceId': 1, 
      'actions.flag': 
       { 
        '$ifNull': ['$actions.flag', 
           [None, None]] 
       } 
     } 
} 
+0

@Jesse我仍然得到行動爲'u'actions ':{u'flag':無,無]}'我要的是像'u'actions'列表:[{u'flag':無,無]}]'那些 「方括號」 –

+0

由於它的工作!我認爲我看到的是錯誤的,我必須用$ project中的動作替換actions.flag,然後插入你已經回答的東西的其餘部分,它就起作用了!謝謝 –

相關問題