我正在尝试使用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/
),但遗憾的是我没有看到任何结果。
答案 0 :(得分:0)
这可能不是您正在寻找的解决方案,但功能正是您想要做的。 Select2通过ajax具有自动完成远程数据加载功能,该功能非常易于实现,可能会让您的生活更轻松。
https://select2.github.io/examples.html 向下滚动以加载远程数据并使用他们拥有的github示例进行播放。
编辑:
后端问题可能是众多问题之一。由于您正在获取地址:[]您的端点设置正确,因此在请求之前不会填充数据。是否有任何服务器端错误消息?尝试在for循环开始后立即打印地址,然后再附加到阵列并检查是否有数据。这可能是很多事情之一。查询本身存在问题,并且不会返回数据。数据不是您期望的格式,您可能会遇到字典键问题。我没有和mongo合作过一段时间,所以这个是在黑暗中拍摄的。试试for address in addressCollection.find({'Address': re.compile(regex, re.IGNORECASE)}).fetch():