2015-05-14 29 views
1

我有這樣的結構:

>>>test_3.find_one({"humsavar.Disease": {"$exists": True}}, 
{"humsavar":True, "_id":False}) 

{u'humsavar': [{u'Association': u'Polymorphism', 
    u'Disease': u'-', 
    u'Gene names': u'DTWD1', 
    u'Mutate aa': u'Pro', 
    u'Position aa': 9, 
    u'Reference aa': u'Leu', 
    u'Substitution': u'Leu9Pro', 
    u'SwissVarID': u'VAR_036757', 
    u'Uniprot': u'Q8N5C7', 
    u'dbSNP': u'rs11539522'}, 
    {u'Association': u'Polymorphism', 
    u'Disease': u'Pyruvate dehydrogenase lipoic acid synthetase deficiency', 
    u'Gene names': u'DTWD1', 
    u'Mutate aa': u'Lys', 
    u'Position aa': 13, 
    u'Reference aa': u'Glu', 
    u'Substitution': u'Glu13Lys', 
    u'SwissVarID': u'VAR_036758', 
    u'Uniprot': u'Q8N5C7', 
    u'dbSNP': u'rs11539519'}]} 

我應該用下面的查詢搜索,統計所有從humsavar與疾病和dbSNP的文件?

test_3.find({"$and": [{"humsavar.Disease": {"$ne": u'-', "$exists": True}}, 
{"humsavar.dbSNP": {"$ne": u'-', "$ne": None, "$exists": True}}]}, 
{"humsavar":True, "_id": False}).count() 
# output 32 

我希望類似的數字與此查詢:

test_3.find({"$and": [{"humsavar.Disease": {"$ne": u'-', "$ne":None, "$exists": True}}, 
{"humsavar.dbSNP": {"$ne": u'-', "$ne": None, "$exists": True}}]}, 
{"humsavar":True, "_id": False}).count() 

但練得8499

+0

你試過了嗎?它工作嗎?那麼問題是什麼? – shx2

+0

問題是我不知道運營商的正確使用,我試過幾個組合與$也沒有和$和 – Llopis

回答

2

您上次查詢返回文件太多,因爲在Python中,你真的不能包括重複鍵如下:

{"$ne": u'-', "$ne":None, "$exists": True} 

這會導致第二次出現"$ne"覆蓋第一,被傳遞到pymongo驅動程序之前的

{"$ne":None, "$exists": True} 

這一切都發生在Python解釋器層,字典結束。

如果您希望在單個字段上有多個$ne條件,則可以使用$nin(「不在」)運算符代替。

+0

謝謝,關於'$和'還有其他的方式來重新這個查詢或更好的? – Llopis

2

來自MongoDB的文檔$and的用法。

當指定用逗號分隔的表達式列表時,MongoDB提供了一種隱含的AND操作。當需要在多個表達式中指定相同的字段或運算符時,使用與$和運算符的顯式AND是必要的。

您只需要使用$and運算符作爲重複的字段名稱。隱含條件爲humsaver.Diseasehumsaver.dbSNPhumsavar。 (雖然使用$and會給你相同的結果)。

test_3.find(
    {"humsavar.Disease": 
     {'$and': [ 
      {"$ne": u'-'}, 
      { "$ne":None}, 
      { "$exists": True} 
     ]} 
    }, 
    {"humsavar.dbSNP": 
     {'$and':[ 
      {"$ne": u'-'}, 
      { "$ne": None}, 
      { "$exists": True} 
     ]}, 
    }, 
    {"humsavar":True, "_id": False} 
).count() 
相關問題