sql >> Database >  >> NoSQL >> MongoDB

Een MongoDB-document vinden via een woord in een veldbeschrijving in elk product met Mongoskin

Om door een woord heen te zoeken, bevatten alle producten die in de collectie bestaan ​​in het beschrijvingsveld dat woord, je hebt een regex-overeenkomst nodig met hoofdletterongevoeligheid. U kunt de volgende zoekopdracht gebruiken (als voorbeeld):

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

waar de i in de /test/i geeft niet-hoofdlettergevoeligheid aan, dus de regex komt overeen met het beschrijvingsveld voor elke tekst met de tekenreeks "test" . De equivalente SQL-expressie volgt:

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

Dus je zou hetzelfde kunnen gebruiken in je route-implementatie, met behulp van de find() methode om alle overeenkomende documenten te retourneren in plaats van de findOne() die slechts één document retourneert:

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

Een andere optie is om de $text operator in uw zoekbewerking omdat het een tekstzoekopdracht uitvoert op de inhoud van de velden die zijn geïndexeerd met een tekstindex. Dus het eerste dat u zou doen, is een tekstindex maken in het beschrijvingsveld:

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

Daarna kunt u een query uitvoeren met de $text-operator. De volgende zoekopdracht zoekt bijvoorbeeld naar de term koffie:

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

BEWERKEN :

Als alles gelijk is, kunt u uw route-implementatie bijwerken om in plaats daarvan queryreeksen in de URL te gebruiken:

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 u in uw browser kunt opvragen als http://localhost/description?q=product




  1. Hoe MongoDB rechtstreeks vanuit Ruby opvragen in plaats van Mongoid te gebruiken?

  2. Mongoose save() werkt de waarde niet bij in een array in het databasedocument

  3. Mongoose lijkt stilletjes te falen

  4. Hoe aggregeren op datum wanneer een volledige tijdstempel wordt gegeven in het aggregatiekader?