我正在PyCord上创建一个经济不和谐机器人,它有一个可以添加物品的商店。我希望它可以在不输入物品确切名称的情况下购买物品,如果找到多个物品,则会显示找到的物品列表。用户可以简单地选择物品(我可以自己做)。
然而,我遇到了在MongoDB中搜索对象的问题,我尝试使用**$regex**操作符,但它没有找到任何东西。
我希望按如下方式执行搜索:用户输入带有物品名称的查询,很可能不准确、不完整等,但机器人会尝试查找该物品。例如:
请求:“项目”
数据库:
Shop:
Items:
Item A:
price: 280
Item B:
price: 250
Item C:
price: 200
description: "Good Item"
在这种情况下,它应该找到所有的Item对象(A、B、C),并将它们输出为列表,用户必须选择一个(我自己可以解决这个问题)我希望我的问题已经很清楚了:)
我的密码:
search = await economy_db.find_one({"_id": ctx.guild.id, "Shop.Items": {"$regex": "item"}})
1条答案
按热度按时间ztigrdn81#
问题是您使用的
find_one
总是返回一个对象。您应该使用
find
方法,该方法返回满足查询的所有文档。添加
re
(python正则表达式模块)的用法,得到:或者在MongoDB中使用
$regex
操作符:注意两点:
1.如果你希望正则表达式搜索不区分大小写,那么在第一个例子中,你应该把
re.IGNORECASE
加到compile
函数中,在第二个例子中,把$options: 'i'
加到$regex
运算符中。1.我没有包括
"_id": ctx.guild.id
部分,因为它对每个文档都是唯一的,我们希望所有文档的项目名称满足正则表达式搜索。希望能有所帮助!