使用Flask,MongoDB,jQuery构建自动完成功能

时间:2016-07-07 21:13:50

标签: jquery python mongodb flask autocomplete

我正在尝试使用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})

我正在使用regexre的组合来处理自动填充和类型案例。目前,当我进入浏览器测试查询myapp.dev:5000/getInfoByAddress?Address=123 F时,它返回一个空的JSON:

{
  "Addresses": []
}

当我print regex时,我可以看到在命令行窗口中发送到数据库的正确字符串(/^123 F/),但遗憾的是我没有看到任何结果。

1 个答案:

答案 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():