Ich suche einen Operator, mit dem ich prüfen kann, ob der Wert eines Feldes eine bestimmte Zeichenfolge enthält.
Etwa so:
db.users.findOne({$contains:{"username":"son"}})
Ist das möglich?
Ich suche einen Operator, mit dem ich prüfen kann, ob der Wert eines Feldes eine bestimmte Zeichenfolge enthält.
Etwa so:
db.users.findOne({$contains:{"username":"son"}})
Ist das möglich?
Wenn Sie die Suche nach mehr als einem Attribut durchführen müssen, können Sie $or verwenden. Zum Beispiel
Symbol.find(
{
$or: [
{ 'symbol': { '$regex': input, '$options': 'i' } },
{ 'name': { '$regex': input, '$options': 'i' } }
]
}
).then((data) => {
console.log(data)
}).catch((err) => {
console.log(err)
})
Hier suchen Sie danach, ob die Eingabe im Attribut symbol oder im Attribut name enthalten ist.
Wenn der Regex in Ihrer Aggregatlösung nicht funktioniert und Sie verschachtelte Objekte haben. Versuchen Sie dies Aggregationspipeline (Wenn Ihre Objektstruktur einfach ist, entfernen Sie einfach die anderen Bedingungen aus der folgenden Abfrage):
db.user.aggregate({$match:
{$and:[
{"UserObject.Personal.Status":"ACTV"},
{"UserObject.Personal.Address.Home.Type":"HME"},
{"UserObject.Personal.Address.Home.Value": /.*son.*/ }
]}}
)
Eine andere Möglichkeit wäre eine direkte Abfrage wie diese:
db.user.findOne({"UserObject.Personal.Address.Home.Value": /.*son.*/ });
Wenn Ihre Regex eine Variable enthält, stellen Sie sicher, dass Sie Flucht es.
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
Dies kann wie folgt verwendet werden
new RegExp(escapeRegExp(searchString), 'i')
Oder in einer MongoDb-Abfrage wie dieser
{ '$regex': escapeRegExp(searchString) }
Gleicher Kommentar veröffentlicht aquí
Feldsuche
( '$options': 'i'
für die Suche ohne Berücksichtigung der Groß- und Kleinschreibung)
db.users.aggregate([
{
$match: {
'email': { '$regex': '@gmail.com', '$options': 'i' }
}
}
]);
Vollständige Dokumentensuche
(funktioniert nur bei Feldern, die mit einem Textindex
db.articles.aggregate([
{
$match: { $text: { $search: 'brave new world' } }
}
])
Wie man HTML-Tags in einer RegExp-Übereinstimmung ignoriert:
var text = '<p>The <b>tiger</b> (<i>Panthera tigris</i>) is the largest <a href="http://stackoverflow.com/wiki/Felidae" title="Felidae">cat</a> <a href="http://stackoverflow.com/wiki/Species" title="Species">species</a>, most recognizable for its pattern of dark vertical stripes on reddish-orange fur with a lighter underside. The species is classified in the genus <i><a href="http://stackoverflow.com/wiki/Panthera" title="Panthera">Panthera</a></i> with the <a href="http://stackoverflow.com/wiki/Lion" title="Lion">lion</a>, <a href="http://stackoverflow.com/wiki/Leopard" title="Leopard">leopard</a>, <a href="http://stackoverflow.com/wiki/Jaguar" title="Jaguar">jaguar</a>, and <a href="http://stackoverflow.com/wiki/Snow_leopard" title="Snow leopard">snow leopard</a>. It is an <a href="http://stackoverflow.com/wiki/Apex_predator" title="Apex predator">apex predator</a>, primarily preying on <a href="http://stackoverflow.com/wiki/Ungulate" title="Ungulate">ungulates</a> such as <a href="http://stackoverflow.com/wiki/Deer" title="Deer">deer</a> and <a href="http://stackoverflow.com/wiki/Bovid" class="mw-redirect" title="Bovid">bovids</a>.</p>';
var searchString = 'largest cat species';
var rx = '';
searchString.split(' ').forEach(e => {
rx += '('+e+')((?:\\s*(?:<\/?\\w[^<>]*>)?\\s*)*)';
});
rx = new RegExp(rx, 'igm');
console.log(text.match(rx));
Dies lässt sich wahrscheinlich sehr leicht in einen MongoDB-Aggregationsfilter umwandeln.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.