Ich verwende node-mongodb-native
, um MongoDB Abfragefunktionen zu implementieren. Ich brauche eine Abfrage durchführen, wenn tag
einen Teil oder kombiniert firstName
und lastName
wie diese Spiele:node.js - RegExp in mongodb native
filter50WithTagSkip(tag, skip) {
return new Promise((resolve, reject) => {
const regex = new RegExp(tag, 'g');
const or_criteria = [
{ firstName: { $regex: regex, $options: 'i' } },
{ lastName: { $regex: regex, $options: 'i' } },
{ fullName: { $regex: regex, $options: 'i' } },
{ email: { $regex: regex, $options: 'i' } },
{ phone: { $regex: regex, $options: 'i' } }
];
this._db.collection(this._table)
.aggregate({
$project: {
deleted: 1,
firstName: 1,
lastName: 1,
email: 1,
phone: 1,
fullName: { $concat: ['$firstName', ' ', '$lastName'] }
}
}).match({
$or: or_criteria,
deleted: false
})
.skip(skip)
.limit(50)
.toArray((err, res) => {
if (err) {
this._logger.error(err);
reject(err);
} else {
resolve(res);
}
});
});
}
Mit diesen Proben:
{
firstName: "first1",
lastName: "last1"
},
{
firstName: "first2",
lastName: "last2"
}
Wenn tag
ist first
das Ergebnis beiden Dokumente hat. Aber wenn ich firstName
und lastName
Kriterien auskommentieren, denke, dass sie nicht benötigt werden, weil RegExp Muster auf die kombinierte Zeichenfolge anwenden wird, ist das Ergebnis ein leeres Array. Ich fühle mich ziemlich verwirrt