【问题标题】:Get a document from MongoDB by matching keys and values通过匹配键和值从 MongoDB 获取文档
【发布时间】:2021-07-25 19:24:16
【问题描述】:

我有这样的 mongodb 架构:

{
  "name": "some_name",
  "field1": "value1",
  "field2": "value2",
  "field3": "value3"
}

每个文档中键值的数量可能不同,它们不是固定的。但是字段name 是固定的,并且始终位于每个文档的首位。

我需要找到一个匹配所有键和值的文档,但是如果给定的键值匹配 AND,那么它们的数量比架构中的多,无论如何都返回匹配的文档。

当前状态: 如果我尝试使用 find_one() 并传递 search fields 与架构中不同数量的键值,它返回 None。

我的代码示例:

search_fields = {
  "field1": "value1",
  "field2": "value2",
  "field3": "value3",
  "field4": "value4"
}
req.app.mongodb["forms"].find_one(search_fields) # None

我正在尝试查找名称为 some_namesearch_fields 键值的文档,但我得到了 None,因为在该文档中只显示了 3 个字段,但给出了 4 个

search_fields 中的键值数量可能不同。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    您的 search_fields 必须包含三个参数的任意组合,由“$or”运算符分隔。类似的东西:search_fields = {"$or":[ {3 fields here}, {next 3 fields here}, ...]}

    【讨论】:

    • 忘了提到search_fields 中的键值数量也可能不同。
    • 我需要将来自search_fields 的键值与所有文档中的键值匹配,当找到具有所有匹配键值的第一个文档时,将其返回。不管search_fields中有多少字段
    • 或者,如果 pymongo 没有获取此类数据的功能,我是否应该获取所有文档并找到包含所有匹配字段的文档?我认为这不是一个好的解决方案。
    猜你喜欢
    • 2018-10-08
    • 2021-02-25
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2017-03-09
    • 2020-06-07
    相关资源
    最近更新 更多