【问题标题】:How to search for a value in two different type of field or index or heading of mongodb using python?如何使用python在mongodb的两种不同类型的字段或索引或标题中搜索值?
【发布时间】:2022-01-20 21:53:22
【问题描述】:

我对任何类型的编程都不熟悉。这是我在使用 mongodb 时遇到的一个问题。下面是我从两个不同的 csv 文件中导入的文档的集合结构。

{
    "_id": {
        "$oid": "61bc4217ed94f9d5fe6a350c"
    },
    "Telephone Number": "8429950810",
    "Date of Birth": "01/01/1945"
}

{
    "_id": {
        "$oid": "61bc4217ed94f9d5fe6a350c"
    },
    "Telephone Number": "8129437810",
    "Date of Birth": "01/01/1998"
}

{
    "_id": {
        "$oid": "61bd98d36cc90a9109ab253c"
    },
    "TELEPHONE_NUMBER": "9767022829",
    "DATE_OF_BIRTH": "16-Jun-98"
}

{
    "_id": {
        "$oid": "61bd98d36cc9090109ab253c"
    },
    "TELEPHONE_NUMBER": "9567085829",
    "DATE_OF_BIRTH": "16-Jan-91"
}

前两个条目来自 csv,接下来的两个条目来自另一个 csv 文件。现在我正在创建一个用户界面,用户可以在其中搜索电话号码。在上述情况下,如何使用 find() 编写查询以在索引(电话号码和 TELEPHONE_NUMBER)中搜索电话号码值。如果不可能,有没有办法在将 csv 导入到 db 时将索引更改为所需的格式。或者有没有一种方法可以创建两个不同的集合,然后将 csv 导入每个集合,然后对这两个集合执行集体搜索。或者我们可以创建一个复合索引,然后搜索复合索引。我正在使用 pymongo 进行所有操作。

谢谢。

【问题讨论】:

  • 我很好奇你是如何设法获得一个 CSV 文件来为不同的行导入不同的字段名称。
  • 当我将具有不同行的两个不同 csv 文件导入同一个集合时发生这种情况。

标签: python python-3.x mongodb


【解决方案1】:

假设您有通过 pymongo 连接的连接字符串。那么下面是一个查询电话号码“8429950810”的例子:

from pymongo import MongoClient
client = MongoClient("connection_string")
db = client["db"]
collection = db["collection"]
results = collection.find({"Telephone Number":"8429950810"})

请注意,这将作为类型光标返回,如果您希望将文档放在列表中,请考虑将查询包装在 list() 中,如下所示:

results = list(collection.find({"Telephone Number":"8429950810"}))

【讨论】:

  • 感谢您的回复。但在这里我希望用户在 db 中搜索任何数字。在您的情况下,它只搜索电话号码,而不是 TELEPHONE_NUMBER 索引。
【解决方案2】:

您可以使用或查询是否使用不同的key来存储相同类型的数据。

yourmongocoll.find({"$or":[ {"Telephone Number":"8429950810"}, {"TELEPHONE_NUMBER":8429950810}]})

【讨论】:

  • 谢谢你的帮助。但是当我们要处理数百万个数据时,执行时间会很长。在这里我们可以创建一个复合索引,然后搜索复合索引。
  • 您还可以为这两个字段分别创建 [部分索引] (docs.mongodb.com/manual/core/index-partial)。因为两个键都在同一级别,您将使用或查询查找。可以像这样创建部分索引db.yourcollection.createIndex( { Telephone Number: 1}, { partialFilterExpression: { Telephone Number: { $exists: true } } } )
猜你喜欢
  • 1970-01-01
  • 2019-05-06
  • 2016-03-12
  • 2012-02-06
  • 1970-01-01
  • 2017-01-20
  • 2016-10-03
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多