我的MongoDB文档如下:
{
'x': 1,
'y': 2,
'z': 3
},
{
'x': 10,
'y': 20,
'z': 30
},
{
'x': 100,
'y': 200,
'z': 300
},
查询如下:
query_1 = {
'x': [1, 100]
}
query_2 = {
'x': [10],
'z': [2]
}
不幸的是,当我们执行collection.find(query_1)
或collection.find(query_2)
时,由于查询中的列表而没有得到任何结果。我如何让Mongo接受查询?请注意,我的查询字典的“值”始终是列表。
编辑:
相信下面我会扩大Belly Buster的答案,
{
'$or': [
{'x': {'$in': ['item1', 'item2']}},
{'y': {'$in': ['item1', 'item2']}}
]
}
回答我的问题。但是,我认为有更好的方法可以实现这一目标。有吗?
答案 0 :(得分:1)
查询1,您正在搜索包含列表x
的字段[1, 100]
。由于没有匹配的记录,因此没有结果。现在,如果要在x
中搜索1或100,则需要使用$in
运算符;您的查询应该是:
result = db.mycollection.find({'x': {'$in': [1, 100]}})
查询2,您正在搜索包含列表x
的字段[10]
和包含列表z
的字段[2]
。同样,您的数据中没有匹配的内容。
我不确定您要为此执行哪个查询,但是如果它是x == 10 or z == 2
,则您的查询是:
result = db.mycollection.find({'$or': [{'x': 10}, {'z': 2}]})