在我的数据库中,数据按照以下方案存储:
{'_id': ...,
'names': [{'first': ...,
'last': ...},
{'first': ...,
'last': ...},
...
],
...
}
现在,在我的程序中,我根据以下方案获得了一个名称列表:
name_list = [(first_name1, last_name1), (first_name2, last_name2), ...]
我想要的是找到在name_list
中找到的任何一个姓/名的组合都包含在names
数组中的所有文档。
如果我只需要检查一个名称(而不是一个列表),我将使用以下查询:
query = {'names':
{'$elemMatch':
{'first_name': first_name,
'last_name': last_name}
}}
因此,我可以为列表中的每个名称提供这个查询,这样做如下:
all_results = []
for first_name, last_name in name_list:
rv := # Result from query
# combine all_results and rv
但我觉得应该有更好的方法。
发布于 2019-10-26 09:21:30
可以使用name_list
使用和创建多个elem匹配查询,该查询的工作方式是查找任何第一个/最后一个组合匹配的文档。
查询:认为name_list
是
//[(first_name1, last_name1), (first_name2, last_name2), (first_name3, last_name3)]
db.collection.find({
$or: [
{
names: {
$elemMatch: {
first: "first_name1",
last: "last_name1"
}
}
},
{
names: {
$elemMatch: {
first: "first_name2",
last: "last_name2"
}
}
},
{
names: {
$elemMatch: {
first: "first_name3",
last: "last_name3"
}
}
}
]
});
https://stackoverflow.com/questions/58571517
复制