Unten finden Sie meinen Code, wo ich versuche, Felder (Vorname, Nachname und E-Mail) in Mongoose nach einem Schlüsselwort zu suchen. Leider funktioniert es nicht wie erwartet. Es ist nur Renditen führen, wenn die volle Vor- oder Nachnamen eingegeben wird, aber ich möchte in allen Fällen erhalten führen:Suche nach Vorname, Nachname und E-Mail nach einem Schlüsselwort in Mongoose
Beispiel:
Benutzer Vor- und Nachname = John Smith
- Fall: keyword = Jo
- Fall: keyword = John
- Fall: keyword = John Sm
- Fall: keyword = John Smith
- Fall: keyword = [email protected]
-Code, die Textindizes für Vornamen, Nachnamen und E-Mail verwendet:
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
})
}
})
ich auch auf diese Weise versucht, aber es auch nicht funktioniert für Alle 5 Fälle:
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
})
}
})
Benutzer Schema:
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)
Mache ich etwas falsch oder gibt es eine Möglichkeit, alle 5 Fälle zu implementieren?
Haben Sie irgendwelche Lösungen dafür gefunden? –