首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将$in和$elemMatch与MongoDB (PyMongo)有机结合

如何将$in和$elemMatch与MongoDB (PyMongo)有机结合
EN

Stack Overflow用户
提问于 2019-10-26 14:09:46
回答 1查看 146关注 0票数 1

在我的数据库中,数据按照以下方案存储:

代码语言:javascript
代码运行次数:0
运行
复制
{'_id': ...,
 'names': [{'first': ...,
            'last': ...},
           {'first': ...,
            'last': ...},
           ...
           ],
...
}

现在,在我的程序中,我根据以下方案获得了一个名称列表:

代码语言:javascript
代码运行次数:0
运行
复制
name_list = [(first_name1, last_name1), (first_name2, last_name2), ...]

我想要的是找到在name_list中找到的任何一个姓/名的组合都包含在names数组中的所有文档。

如果我只需要检查一个名称(而不是一个列表),我将使用以下查询:

代码语言:javascript
代码运行次数:0
运行
复制
query = {'names':
                 {'$elemMatch':
                      {'first_name': first_name,
                       'last_name': last_name}
                  }}

因此,我可以为列表中的每个名称提供这个查询,这样做如下:

代码语言:javascript
代码运行次数:0
运行
复制
all_results = []
for first_name, last_name in name_list:
    rv := # Result from query
    # combine all_results and rv

但我觉得应该有更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-26 17:21:30

可以使用name_list使用和创建多个elem匹配查询,该查询的工作方式是查找任何第一个/最后一个组合匹配的文档。

查询:认为name_list

代码语言:javascript
代码运行次数:0
运行
复制
//[(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"
        }
      }
    }
  ]
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58571517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档