【发布时间】:2022-11-23 03:14:24
【问题描述】:
我有一个名为 bad_words 的带有 mongodb 集合的 spring boot,它看起来像这样
@Document(collection ="bad_words")
@Data
public class BadWord {
@Id
private String word;
}
现在我想搜索 _id 是否是提供的坏词的一部分。
如果我试试这个
Query query = new Query();
query.addCriteria(Criteria.where("_id").regex(".*shit.*", "i"));
BadWord badWord = mongoOperations.findOne(query, BadWord.class);
我找到了匹配项,但如果我尝试这个
Query query = new Query();
query.addCriteria(Criteria.where("_id").regex(".*shit1234.*", "i"));
BadWord badWord = mongoOperations.findOne(query, BadWord.class);
找不到匹配项。如何反向检查 _id 是提供的单词的子字符串还是完全匹配。
我的目标是查找单词是否包含 id 中的坏词,并将坏词的字符替换为字符 *。
下面是文档的一些例子
{
"_id": "badword1",
"_class": "com.example.models.BadWord"
},
{
"_id": "badword2",
"_class": "com.example.models.BadWord"
}
我想过滤的话
- 坏词1
- 坏词 1 坏词 2
- 坏词123
有什么帮助吗?
【问题讨论】:
-
我不清楚您为什么要将
1234字符附加到搜索字符串中。这是为了减少您进行的搜索次数吗? -
所以这是可变的,它可以是任何东西,例如我添加的。这是用户输入的坏词。我想查找提供的坏词的子字符串是否在 id 中。
-
是的,但是您的第一个查询没有完成吗?您的第一个查询将(正确)标记更多的潜在文件比第二个好吗?
-
不,它不工作。对于第一个查询,如果 id 和输入值的格式为 ("_id", "input") ex: ("badword", "badword") 或 ("badword123", "badword") 它将起作用。但如果我有 ("badword", "badwordanotherbadword") 它不会。
标签: mongodb spring-boot aggregation-framework spring-data-mongodb