是否可以在mLab中使用like / contains查询?我在服务器https://mlab.com/上有这样的json数据:
"County": "Kildare, Laois, Carlow"
我可以查询数据集以返回所有trail = County Kildare:
@GET("databases/walks/collections/walks")
Call<List<Trail>> byCounty (@Query("q") String county,@Query("apiKey") String apiKey);
参数“q”包含:q={"County": "Kildare"}
但是只选择符合以下条件的数据:
"County": "Kildare"
是否有一个Mlab查询与MongoDB中的Contains或SQL中的Like包含相同的功能。所以如果它包含“Kildare”,我可以搜索县域。
或者甚至如何在HTTP请求中执行此操作,我也许可以在q={ }
中使用它。香港专业教育学院尝试使用q={"County":"/.*Kildare.*/"}
谢谢。
mLab Data API中的q
参数只是一个MongoDB查询文档。您可以像在MongoDB查询文档中一样使用任何MongoDB operator。
MongoDB没有$contains
运算符。但是,如果您在字符串中搜索文本,则可以使用$regex
或$text
运算符。请参阅documentation for $regex
和documentation for $text
以了解更多信息。
要使用$regex
,请尝试将其作为q
参数:
q={"County": {"$regex": "Kildare"}}
要使用$text
,首先在County字段上构建文本索引。您可以在mLab管理门户(instructions in the documentation)上执行此操作或在mongo shell上运行此命令:
db.walks.createIndex({ County: "text" })
然后你可以尝试这个q
参数:
q={"$text": {"$search": "Kildare"}}
重要说明:$regex
和$text
操作效率极低。您可以更有效,更轻松地重构数据模型。而不是在字符串中有一个县列表,也许将它们放在一个数组中,如下所示:
"County": ["Kildare", "Laois", "Carlow"]
然后,要在其County数组中搜索包含Kildare的所有文档,您只需使用此查询:
q={"County": "Kildare"}
对于您而言,这可能比使用$regex
或$text
更好。