下面你可以找到我的代碼,我試圖通過一個關鍵詞在Mongoose中搜索字段(名字,姓氏和電子郵件)。不幸的是,它沒有按照我的預期工作。它只返回的結果,如果是進入了全姓或名,但我想獲得導致的所有情況:在Mongoose中搜索名,電子郵件的一個關鍵詞
例子:
用戶名和姓=約翰·史密斯
- 情況:關鍵字=喬
- 情況:關鍵字=約翰
- 情況:關鍵字=約翰釤
- 情況:關鍵字=約翰·史密斯
- 情況:關鍵字= [email protected]
它使用的名字,姓氏文本索引和電子郵件代碼:
User.findOne({ _id: req.user.id })
.populate({
path: 'friends',
select: 'firstName lastName email avatarPath facebookID',
match: { $text: { $search: req.query.keyWord } }
})
.populate({
path: 'receivedFriendRequests',
select: 'firstName lastName email avatarPath facebookID',
match: { $text: { $search: req.query.keyWord } }
})
.exec(function (err, user) {
if (err) {
logger.error('Friend 500 ' + err)
return res.status(500).json({
code: config.errorCode.status500.code,
message: config.errorCode.status500.message
})
}
if (!user) {
logger.error('Friend 404 User does not exist.')
return res.status(404).json({
code: config.errorCode.status404.code,
message: config.errorCode.status404.message
})
}else {
if (!user.friends) {
logger.error('Friend 404 User friends do not exist.')
return res.status(404).json({
code: config.errorCode.status404.code,
message: config.errorCode.status404.message
})
}
return res.json({
receivedFriendRequests: user.receivedFriendRequests.slice(0, 5),
data: user.friends
})
}
})
我也嘗試過這種方式,但它是不是也工作所有5個情況:
User.findOne({ _id: req.user.id })
.populate({
path: 'friends',
select: 'firstName lastName email avatarPath facebookID',
match: {
$or: [
{
firstName: { $regex: req.query.keyWord, $options: 'i'}
},
{
lastName: { $regex: req.query.keyWord, $options: 'i'}
},
{
email: { $regex: req.query.keyWord, $options: 'i'}
}
]
}
})
.populate({
path: 'receivedFriendRequests',
select: 'firstName lastName email avatarPath facebookID',
match: {
$or: [
{
firstName: { $regex: req.query.keyWord, $options: 'i'}
},
{
lastName: { $regex: req.query.keyWord, $options: 'i'}
},
{
email: { $regex: req.query.keyWord, $options: 'i'}
}
]
}
})
.exec(function (err, user) {
if (err) {
logger.error('Friend 500 ' + err)
return res.status(500).json({
code: config.errorCode.status500.code,
message: config.errorCode.status500.message
})
}
if (!user) {
logger.error('Friend 404 User does not exist.')
return res.status(404).json({
code: config.errorCode.status404.code,
message: config.errorCode.status404.message
})
}else {
if (!user.friends) {
logger.error('Friend 404 User friends do not exist.')
return res.status(404).json({
code: config.errorCode.status404.code,
message: config.errorCode.status404.message
})
}
return res.json({
receivedFriendRequests: user.receivedFriendRequests.slice(0, 5),
data: user.friends
})
}
})
用戶模式:
var UserSchema = new Schema({
firstName: {
type: String
},
frstNameNormalized: {
type: String
},
lastName: {
type: String
},
lastNameNormalized: {
type: String
},
email: {
type: String,
// unique: true,
// required: true,
lowercase: true,
// match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please enter a valid email address']
},
birthDate: {
type: Date
},
facebookID: {
type: String
},
twitterID: {
type: String
},
password: {
type: String
},
nickname: {
type: String,
default: ''
},
description: {
type: String,
default: ''
},
avatarPath: {
type: String,
default: ''
},
friends: [{ type: Schema.Types.ObjectId, ref: 'User' }],
receivedFriendRequests: [{ type: Schema.Types.ObjectId, ref: 'User' }],
sentFriendRequests: [{ type: Schema.Types.ObjectId, ref: 'User' }],
sharedFriendCheckIns: [{ type: Schema.Types.ObjectId, ref: 'User' }],
resetPasswordToken: String,
resetPasswordExpires: Date,
emailConfirmToken: String,
emailConfirmExpires: Date,
emailConfirmed: {
type: Boolean,
default: false
}
})
....
UserSchema.index({ firstName: 'text', lastName: 'text', email: 'text'})
var User = module.exports = mongoose.model('User', UserSchema)
我做錯了什麼或者有什麼方法可以執行所有5種情況?
您是否找到了解決方案? –