gpt4 book ai didi

regex - 如何在使用 morphia 的查询中使用正则表达式?

转载 作者:IT老高 更新时间:2023-10-28 13:36:15 27 4
gpt4 key购买 nike

Mongodb 允许模式/pattern/的正则表达式不使用 $regex 表达式。

http://docs.mongodb.org/manual/reference/operator/query/in/

我如何使用 morphia 来做到这一点?

如果我使用字段运算符 in 和“java.util.regex.Pattern”类型的值给出字段条件,则生成的等效查询$in:[$regex: 'given pattern'] 根本不会返回预期结果。

期望:$in :[/pattern1 here/,/pattern2 here/]实际使用“模式”对象:$in : [$regex:/pattern1 here/,$regex:/pattern 2 here/]

最佳答案

我不完全确定如何处理您的代码示例,但这里有一个可用的 Morphia 代码片段:

Pattern regexp = Pattern.compile("^" + email + "$", Pattern.CASE_INSENSITIVE);
mongoDatastore.find(EmployeeEntity.class).filter("email", regexp).get();

请注意,这真的很慢。它不能使用索引,并且总是需要完整的集合扫描,所以不惜一切代价避免它!

更新:我添加了一个特定的代码示例。 $in 不需要在数组内进行搜索。只需像在字符串中一样使用 /^I/:

> db.profile.find()
{
"_id": ObjectId("54f3ac3fa63f282f56de64bd"),
"tags": [
"India",
"Australia",
"Indonesia"
]
}
{
"_id": ObjectId("54f3ac4da63f282f56de64be"),
"tags": [
"Island",
"Antigua"
]
}
{
"_id": ObjectId("54f3ac5ca63f282f56de64bf"),
"tags": [
"Spain",
"Mexico"
]
}
{
"_id": ObjectId("54f3ac6da63f282f56de64c0"),
"tags": [
"Israel"
]
}
{
"_id": ObjectId("54f3ad17a63f282f56de64c1"),
"tags": [
"Germany",
"Indonesia"
]
}
{
"_id": ObjectId("54f3ad56a63f282f56de64c2"),
"tags": [
"ireland"
]
}
> db.profile.find({ tags: /^I/ })
{
"_id": ObjectId("54f3ac3fa63f282f56de64bd"),
"tags": [
"India",
"Australia",
"Indonesia"
]
}
{
"_id": ObjectId("54f3ac4da63f282f56de64be"),
"tags": [
"Island",
"Antigua"
]
}
{
"_id": ObjectId("54f3ac6da63f282f56de64c0"),
"tags": [
"Israel"
]
}
{
"_id": ObjectId("54f3ad17a63f282f56de64c1"),
"tags": [
"Germany",
"Indonesia"
]
}

注意:数组中的位置没有区别,但搜索区分大小写。如果不需要,请使用 /^I/i 或在 Java 中使用 Pattern.CASE_INSENSITIVE

关于regex - 如何在使用 morphia 的查询中使用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28739087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com