【发布时间】:2016-11-10 08:33:51
【问题描述】:
我正在尝试使用 Flask、MongoDB 和 jQuery Autocomplete 构建自动完成搜索。一旦用户开始在搜索栏中键入地址,我想显示地址列表。例如,如果用户键入123 F,我想根据该字符串显示 5 个紧密匹配的地址。从列表中选择一个地址后,我想显示一些与该地址关联的属性,这些属性是同一个 CSV 表的一部分。
我有一个简单的 CSV 地址文件,其结构如下:
ID ADDRESS
1 123 Fakevill St
2 35 Lakeshore Rd
.. and so on
我首先使用以下命令将此 CSV 文件导入 MongoDB:
mongoimport --db myDB --collection myAddresses --file "/path/to/file" --type csv --headerline
虽然我还没有开始在客户端工作,但我在服务器端遇到了一些问题。我的服务器端正则表达式查询不返回任何结果。以下是我在 Flask 中的设置方式:
@app.route('/getInfoByAddress', methods=['GET'])
def getInfoByAddress():
searchedAddress = request.args.get("Address")
addressCollection = myDB["addresses"]
addressJSON = []
regex = "/^" + searchedAddress + "/"
for address in addressCollection.find({'Address': re.compile(regex, re.IGNORECASE)},{"Address":1, "ID":1, "_id":0}):
addressJSON.append({"Address":address["Address"]})
return jsonify({"Addresses":addressJSON})
我使用regex 和re 的组合来处理自动完成和类型案例。目前,当我去浏览器测试查询时,myapp.dev:5000/getInfoByAddress?Address=123 F,它返回一个空 JSON:
{
"Addresses": []
}
当我执行print regex 时,我可以在命令行窗口中看到正确的字符串 (/^123 F/) 正在发送到数据库,但遗憾的是我没有看到任何结果。
【问题讨论】:
-
addressCollection.find(...)返回什么?你确定数据加载正确吗?你能从数据库中得到什么吗? -
您的查询似乎不正确:stackoverflow.com/questions/3483318/…
-
在命令行中,当我做
db.addresses.find().limit(5)时,我可以看到地址列表,所以数据在那里。 -
@IanAuld 你是对的。在我的查询中使用
$regex有效。我现在可以看到地址了。
标签: jquery python mongodb flask autocomplete