llr*_*lrs 4 python mongodb pymongo
我有这样的结构:
>>>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'}]}
Run Code Online (Sandbox Code Playgroud)
我是否应该使用以下查询进行搜索以计算来自 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
Run Code Online (Sandbox Code Playgroud)
我希望此查询有类似的数字:
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()
Run Code Online (Sandbox Code Playgroud)
但结果是8499
你的最后一个查询返回了太多文档,因为在 python 中你不能真正在字典中包含重复的键,如下所示:
{"$ne": u'-', "$ne":None, "$exists": True}
Run Code Online (Sandbox Code Playgroud)
这会导致第二次出现"$ne"覆盖第一次出现,以字典结尾
{"$ne":None, "$exists": True}
Run Code Online (Sandbox Code Playgroud)
这一切都发生在 python 解释器层中,然后传递给 pymongo 驱动程序。
如果您想$ne在单个字段上设置多个条件,则可以使用$nin(“not in”)运算符。
| 归档时间: |
|
| 查看次数: |
6935 次 |
| 最近记录: |