Node.js 如何在mongodb中的引用字段中使用$regex搜索
我正在努力完成一项任务,我使用了两种模式Node.js 如何在mongodb中的引用字段中使用$regex搜索,node.js,mongodb,mongoose,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我正在努力完成一项任务,我使用了两种模式 User Schema { "first_name": String, "last_name":String, "address": String } Employee schema { user:{ type: ObjectId, ref: 'User' }, gross_pay: String, net_pay: String tax: String, } 那么,在这个用户引用的字段中,如
User Schema
{
"first_name": String,
"last_name":String,
"address": String
}
Employee schema
{
user:{
type: ObjectId,
ref: 'User'
},
gross_pay: String,
net_pay: String
tax: String,
}
那么,在这个用户引用的字段中,如何在员工模式中使用$regex搜索first_name呢?我试了很多方法,但都没能成功。我如何解决它?提前感谢第一种方法: 使用聚合
Employee.aggregate([
{ "$lookup": {
"from": "users",
"let": { "user": "$user" },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$_id", "$$user"] }}},
{ "$project": { "firstName": 1 }}
],
"as": "user"
}},
{ "$unwind": "$user" },
{ "$match": { "user.firstName": { "$regex": your_string, "$options": "i" }}}
])
但这不是更好的方法,因为该阶段应用于所有Employee
文档,然后应用于用户firstName
使得查询有点慢
第二种方法:
首先使用$regex
查找名firstName
等于匹配字符串的用户,然后在Employee
集合中查找\u id
const userIds = await (Users.find({ "firstName": { "$regex": your_string, "$options": "i" } })).map(user => user._id)
const employees = await Employee.find({ "user": { "$in": userIds }})
第三种方法:
在employee
模式中保留user
模式的单键firstName
员工模式
user: { type: ObjectId, ref: 'User' },
gross_pay: String,
net_pay: String
tax: String
firstName: String
然后直接使用查询
const userIds = await Employee.find({
"firstName": { "$regex": your_string, "$options": "i" }
})