2014-12-23 4 views
0

mongo db에서 쿼리를 실행했지만 많은 솔루션을 시도했지만 여전히 작동하지 않았습니다. 어떤 도움을 주시면 감사하겠습니다.Mongodb 문서 통과

문서에서 "channel"이라는 키를 찾는 방법은 무엇입니까?

db.clients.find ({ "_ ID": 69})

{ 
    "_id" : 69, 
    "configs" : { 
     "GOOGLE" : { 
      "drid" : "1246ABCD", 
      "adproviders" : { 
       "adult" : [ 
        { 
         "type" : "landing", 
         "adprovider" : "abc123", 
         "channel" : "abc456" 
        }, 
        { 
         "type" : "search", 
         "adprovider" : "xyz123", 
         "channel" : "xyz456" 
        } 
       ], 
       "nonadult" : [ 
        { 
         "type" : "landing", 
         "adprovider" : "pqr123", 
         "channel" : "pqr456" 
        }, 
        { 
         "type" : "search", 
         "adprovider" : "lmn123", 
         "channel" : "lmn456" 
        } 
       ] 
      } 
     }, 
     "channel" : "ABC786", 
     "_cls" : "ClientGoogleDoc" 
    } 
} 

는 "{(이름 채널

db.clients.find와 키를 찾으려고 _id ": 69,"channel ": true})

예상 :

{"channels": ["abc456", "xyz456", "ABC786", "xyz456", "pqr456", "lmn456", ...]} 
+3

질문을 바꾸실 수 있습니까? 이해하기가 조금 어렵습니다. –

답변

1

지금까지 내가 아는 한, 당신은 당신이 위의 원하는 목록 구축 재귀 위해 사전에 자신을 통과하는 파이썬을 사용해야 할 것 :

channels = [] 

def traverse(my_dict): 
    for key, value in my_dict.items(): 
     if isinstance(value, dict): 
      traverse(value) 
     else: 
      if key == "channel": 
       channels.append(value) 

traverse({"a":{"channel":"abc123"}, "channel":"xyzzz"}) 
print(channels) 

출력 :

['abc123', 'xyzzz'] 

그러나 projections이라는 것을 사용하면 원하는 채널에 가깝게 정렬 할 수 있습니다. 그러나 모든 채널을 직접 지정해야하므로 실제로는 아닙니다.

db.clients.find({"_id": 69}, {"configs.channel":1}) 

반환 :

{ "_id" : ObjectId("69"), "configs" : { "channel" : "ABC786" } } 

정말 멋진 얻고 싶은 경우에, 당신은 상관없이 주어진 사전에있는 모든 키를 생성하는 generator 기능을 쓸 수있는 방법을 깊이 :

my_dict = { "a": { 
       "channel":"abc123", 
       "key2": "jjj", 
       "subdict": {"deep_key": 5, "channel": "nested"} 
      }, 
      "channel":"xyzzz"} 

def getAllKeys(my_dict): 
    for key, value in my_dict.items(): 
     yield key, value 
     if isinstance(value, dict): 
      for key, value in getAllKeys(value): 
       yield key, value 

for key, value in getAllKeys(my_dict): 
    if key == "channel": 
     print value 

출력 :

nested 
abc123 
xyzzz