MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trovare un documento MongoDB attraverso una parola nella descrizione di un campo in ogni prodotto con Mongoskin

Per trovare attraverso una parola, tutti i prodotti che esistono nella collezione includono nel campo della descrizione quella parola, è necessaria una corrispondenza regolare con insensibilità alle maiuscole e minuscole. Potresti usare la seguente query (come esempio):

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

dove il i nel /test/i indica la distinzione tra maiuscole e minuscole, quindi la regex corrisponde nel campo della descrizione per qualsiasi testo con la stringa "test" . Segue l'espressione SQL equivalente:

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

Quindi potresti usare lo stesso nell'implementazione del tuo percorso, usando find() metodo per restituire tutti i documenti corrispondenti invece di findOne() che restituisce un solo documento:

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

Un'altra opzione è usare $text nell'operazione di ricerca in quanto esegue una ricerca di testo sul contenuto dei campi indicizzati con un indice di testo. Quindi la prima cosa che dovresti fare è creare un indice di testo nel campo della descrizione:

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

Dopodiché puoi interrogare usando l'operatore $text. Ad esempio, la query seguente cerca il termine caffè:

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

MODIFICA :

A parità di condizioni, puoi quindi aggiornare l'implementazione del percorso per utilizzare invece le stringhe di query nell'URL:

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

che puoi interrogare nel tuo browser come http://localhost/description?q=product