MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Finden eines MongoDB-Dokuments durch ein Wort in einer Feldbeschreibung in jedem Produkt mit Mongoskin

Um ein Wort zu finden, das alle in der Sammlung vorhandenen Produkte im Beschreibungsfeld enthalten, benötigen Sie eine Regex-Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung. Sie könnten die folgende Abfrage verwenden (als Beispiel):

db.product.find({"data.description": /test/i});

wo das i im /test/i gibt an, dass die Groß-/Kleinschreibung nicht beachtet wird, daher passt die Regex auf das Beschreibungsfeld für jeden Text mit der Zeichenfolge "test" . Der äquivalente SQL-Ausdruck folgt:

select * from product where description like '%test%'

Sie könnten also dasselbe in Ihrer Routenimplementierung verwenden, indem Sie find() -Methode, um alle übereinstimmenden Dokumente anstelle von findOne() die nur ein Dokument zurückgibt:

app.get("/description/:id", auth, function(req, res, next) {
    req.collection.find({
        "data.description": /req.params.id/i
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

Eine weitere Option ist die Verwendung von $text -Operator in Ihrer Suchoperation, da er eine Textsuche nach dem Inhalt der Felder durchführt, die mit einem Textindex indiziert sind. Als Erstes würden Sie also einen Textindex für das Beschreibungsfeld erstellen:

db.collection.createIndex( { "data.description": "text" } )

Danach können Sie mit dem $text-Operator abfragen. Die folgende Abfrage sucht beispielsweise nach dem Begriff Kaffee:

db.collection.find( { $text: { $search: "coffee" } } )

BEARBEITEN :

Wenn alle Dinge gleich sind, können Sie dann Ihre Routenimplementierung aktualisieren, um stattdessen Abfragezeichenfolgen in der URL zu verwenden:

app.get("/description", auth, function(req, res, next) {
    req.collection.find({
        $text: { $search: req.params.q }
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

die Sie in Ihrem Browser als http://localhost/description?q=product abfragen können