【问题标题】:mongodb, find -> how to pass a value to a querymongodb,查找-> 如何将值传递给查询
【发布时间】:2019-09-22 01:12:39
【问题描述】:

我已经创建了一个正在运行的 mongodb 数据库,并且我已经在它下面创建了一个名为“customers”的集合 在这个集合下,我有多个已经插入的字典

我通过 mongopy 通过 python 连接到它,并且我想列出所有“数字”字段与我的值相等的字典。值未知。

我的字典中的一行: {'_id': ObjectId('5d8641b89d8e8bde6b587693'), 'number': '123562', 'name': 'Viola', 'address': 'Sideway 1633'}

我有一个文本文件,它只包含一个数字,我将它存储到“recognizednumber”中 我有一个不同的 .py 需要在我知道我想要搜索什么样的值之前实现。 (这就是创建 txt 并将值写入其中。)

我正在从 .txt 中读取此号码并将其存储到“recognizednumber”中

我想打印出我收藏中的所有字典行,其中“数字”字段与我的“已识别数字”值匹配。

如果我打印出来测试识别的数值,它的显示:

['12352']

不幸的是,它在打印出 mydoc 字典时没有显示任何匹配的值,所以我认为它不匹配。

有人可以帮忙吗,我如何将“未知”值传递到查询中?

非常感谢。

更新::

看起来问题出在: - 从文件中读取时,如果我打印出我的值:['12345'] - 如果我手动设置一个值:12345

    'define which collection'
    mycol = mydb["customers"]
    'search for recognized number'
    recognizednumber = open(FilePaths.fnRecognized, "r",encoding="UTF8").readlines()
    print(recognizednumber)

    myquery = {"number": recognizednumber}

    mydoc = mycol.find(myquery)

    for x in mydoc:
        print(x)

【问题讨论】:

  • 您确定您的python 正确连接到数据库吗?我建议您尝试使用您的 python 程序插入虚假记录(文档)以确保。
  • 我在不同的 .py 中对其进行了测试以连接到它,它可以正常工作。
  • randomname = "William" myquery2 = {"name": randomname} mydoc2 = mycol.find(myquery2) for x2 in mydoc2: print(x2) 像这样测试名称,它向我展示了一个很多字典

标签: python mongodb pymongo


【解决方案1】:

你只需要传入没有任何额外引号或括号的字符串;你可以用类似这样的东西去掉它们:

recognizednumber = recognizednumber[2:-2]

看看这是否有效:

from pymongo import MongoClient
client = MongoClient()
mydb = client['yourdatabase']
mycol = mydb["customers"]

mycol.insert_one({'number': '123562', 'name': 'Viola', 'address': 'Sideway 1633'})

recognizednumber = "['123562']"
recognizednumber = recognizednumber[2:-2]
print(recognizednumber)
myquery = {"number": recognizednumber}
mydoc = mycol.find(myquery)

for x in mydoc:
    print(x)

【讨论】:

    【解决方案2】:

    已解决

    我不得不双剥

    recognizednumber = str(recognizednumber).strip('[]')
    recognizednumber = str(recognizednumber).strip("'")
    

    【讨论】:

    • 没问题,感谢您对此进行调查。实际上,您的解决方案剥夺了我的字符串,如果我将其打印出来,它会向我展示:[]
    猜你喜欢
    • 2016-08-30
    • 2022-12-02
    • 2018-06-16
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多