使用 mongodb 和 mongoose 中的对象正则表达式数组进行过滤
Filtering with an array of objects Regex in mongodb and mongoose
我正在尝试创建一个 dynamic
过滤器,它至少可以使用 3 个字母来实现。我有很多要过滤的字段。
例如,如果我试图通过 email
查找用户,我希望能够输入“@gma”或至少输入“gma”,理想情况下,它应该 return包含指定过滤值的所有用户的数组。这在搜索 firstName
等属性时应该是相同的
我当前的解决方案只有在我提供与我的数据库中已有的值相匹配的完整值时才有效。例如 test@gmail.com
代表 email
或 john
代表 firstName
。我希望能够为后者键入 jo
。
const regexPattern = new RegExp(["^", filterUsersByValue, "$"].join(""), "i");
const filteredU = UserModel.find({ [filterUsersBy]: regexPattern})
如果我没理解错的话,因为你使用的是 JS,你可以像这样创建 find
对象:
let findObj = {}
findObj[userKey] = {$regex:userFilter, $options:"i"}
const filteredU = UserModel.find(findObj)
这会像这样创建 que 对象:
const userFilter = "gma"
const userKey = "email"
let findObj = {}
findObj[userKey] = {$regex:userFilter,$options:"i"}
console.log(findObj)
中的相同之处
我正在尝试创建一个 dynamic
过滤器,它至少可以使用 3 个字母来实现。我有很多要过滤的字段。
例如,如果我试图通过 email
查找用户,我希望能够输入“@gma”或至少输入“gma”,理想情况下,它应该 return包含指定过滤值的所有用户的数组。这在搜索 firstName
等属性时应该是相同的
我当前的解决方案只有在我提供与我的数据库中已有的值相匹配的完整值时才有效。例如 test@gmail.com
代表 email
或 john
代表 firstName
。我希望能够为后者键入 jo
。
const regexPattern = new RegExp(["^", filterUsersByValue, "$"].join(""), "i");
const filteredU = UserModel.find({ [filterUsersBy]: regexPattern})
如果我没理解错的话,因为你使用的是 JS,你可以像这样创建 find
对象:
let findObj = {}
findObj[userKey] = {$regex:userFilter, $options:"i"}
const filteredU = UserModel.find(findObj)
这会像这样创建 que 对象:
const userFilter = "gma"
const userKey = "email"
let findObj = {}
findObj[userKey] = {$regex:userFilter,$options:"i"}
console.log(findObj)