sql >> Databáze >  >> NoSQL >> MongoDB

Vyhledání dokumentu MongoDB pomocí slova v popisu pole v každém produktu pomocí Mongoskin

Chcete-li najít prostřednictvím slova, všechny produkty, které existují v kolekci, obsahují toto slovo do pole popisu, potřebujete shodu regulárního výrazu s nerozlišováním malých a velkých písmen. Můžete použít následující dotaz (jako příklad):

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

kde i v /test/i označuje nerozlišování malých a velkých písmen, takže regulární výraz se shoduje v poli popisu pro jakýkoli text s řetězcem "test" . Následuje ekvivalentní SQL výraz:

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

Totéž byste tedy mohli použít ve své implementaci trasy pomocí find() metoda pro vrácení všech odpovídajících dokumentů namísto findOne() který vrátí pouze jeden 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);
    });
});

Další možností je použít $text operátor ve vaší operaci hledání, když provádí textové vyhledávání v obsahu polí indexovaných pomocí textového indexu. Takže první věc, kterou byste udělali, je vytvořit textový index v poli popisu:

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

Poté můžete dotazovat pomocí operátoru $text. Například následující dotaz hledá výraz káva:

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

UPRAVIT :

Pokud jsou všechny věci stejné, můžete aktualizovat implementaci trasy tak, aby místo toho používala v adrese URL řetězce dotazu:

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

který můžete v prohlížeči zadat jako http://localhost/description?q=product




  1. Jak nastavit rozsah posunu vyrovnávací paměti v MongoDB, neumožňuje nahrát více než 16 MB souboru v objektu BSON?

  2. Dotaz PHP Mongo NENÍ NULL

  3. Použití sed na proměnnou xargs nefunguje uvnitř expanze shellu

  4. ActionDispatch::Routing::RouteSet#call Rails 4.1 opravdu pomalé