在MongoDB中使用find()查找多个词

11 投票
4 回答
12075 浏览
提问于 2025-04-16 07:58

我正在用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]'

撰写回答