在MongoDB中使用find()查找多个词
我正在用Python和MongoDB一起工作。我有一个单词的数组,我用这些单词去搜索Mongo数据库,找出任何匹配的文档,使用的是$in
,比如说:
collection.find({"word":{"$in":words}})
这个方法效果很好,但我想用正则表达式来做。现在的问题是,如果数组中的某个单词拼写成了accus
而不是accuse
,我希望find()
查询仍然能返回与accuse
相关的文档(记录/行)。
我试过这样做,但完全没有效果,没有返回任何结果。
collection.find({"word":{"$in":{"$regex":words}}})
数组中的每个元素前面都有一个^
,比如说['^work', '^accus', '^planet']
我这样做是不是方向错了?
4 个回答
1
使用Spring Data API,你可以这样进行查询:
Query query = new Query();
query.addCriteria(Criteria.where("words").in(Pattern.compile(regex-String)));
find(query)
这个查询会找到所有包含一个叫做 words
的数组字段的文档,并且这个数组里有符合正则表达式的元素。
4
在一个 $in
表达式里,你不能使用 $regex
,但是你可以使用 JavaScript 的正则表达式(就是那种 "/regex/" 的形式)。
根据 MongoDB 的文档,链接在这里:http://docs.mongodb.org/v2.2/reference/operator/query/regex/#in-expressions:
要在
$in
查询表达式中使用正则表达式,你只能使用 JavaScript 的正则表达式对象(也就是 /模式/)。你不能在$in
中使用$regex
操作符。
顺便说一下,我知道这个回答来得有点晚,但希望它能帮助到未来有类似问题的人……
14
抱歉回复得晚了,我刚刚查了一下你的问题。你应该使用一个正则表达式,而不是一堆正则表达式,比如:
'^[work|accus*|planet]'