sql >> Databasteknik >  >> NoSQL >> MongoDB

Att hitta ett MongoDB-dokument genom ett ord i en fältbeskrivning i varje produkt med Mongoskin

För att hitta genom ett ord, alla produkter som finns i samlingen inkluderar det ordet i beskrivningsfältet, du behöver en regexmatchning med skiftlägesokänslighet. Du kan använda följande fråga (som ett exempel):

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

där i i /test/i indikerar skiftlägesokänslighet, därför matchar regexet i beskrivningsfältet för vilken text som helst med strängen "test" . Det motsvarande SQL-uttrycket följer:

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

Så du kan använda samma sak i din ruttimplementering med find() metod för att returnera alla matchade dokument istället för findOne() som bara returnerar ett dokument:

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);
    });
});

Ett annat alternativ är att använda $text operatorn i din sökoperation när den utför en textsökning på innehållet i fälten som indexeras med ett textindex. Så det första du skulle göra är att skapa ett textindex i beskrivningsfältet:

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

Efter det kan du fråga med operatorn $text. Följande fråga söker till exempel efter termen kaffe:

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

REDIGERA :

Allt annat lika kan du sedan uppdatera din ruttimplementering för att använda frågesträngar i URL:en istället:

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);
    });
});

som du kan fråga i din webbläsare som http://localhost/description?q=product




  1. Pymongo markörgräns(1) returnerar mer än 1 resultat

  2. Anpassad MongoDb docker-bild

  3. Redis - Användarnamn, lösenord och db?

  4. Hur man tar bort ett dokument inuti en array i mongodb med $pull