2017-04-02 2 views
0

Cette commande directement sur la base de données que je reçois les résultats que je suis aprèsMongoMapper - Texte complet Recherche

db.products.find({$text: {$search: "some product"}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}}) 

Mais l'utiliser dans MongoMapper Je reçois des erreurs. La recherche sans le champ de score ne produit aucune erreur

@products = Product.where(
    '$text' => {'$search' => @search_string} 
) 

Cependant, lorsque je tente d'ajouter le champ de tri est où je reçois des questions

@products = Product.where(
    '$text' => {'$search' => @search_string}, :score => {'$meta' => "textScore"} 
) 

Mongo :: OperationFailure à/recherche opérateur inconnu: $ méta

Il échoue également en utilisant la méthode de requête brute

@products = MongoMapper.database['products'].find(
    '$text' => {'$search' => @search_string}, :score => {'$meta' => "textScore"} 
) 

La requête complète Je suis en train de courir est

@products = Product.where(
    '$text' => {'$search' => @search_string},:score => {'$meta' => "textScore"} 
).sort(:score => {'$meta' => "textScore"}).limit(5) 

Cela donne l'erreur

Mongo :: OperationFailure à/recherche doit avoir $ projection méta pour toutes les clés de tri meta $

Est-ce que quelqu'un a des suggestions d'où je vais mal? Je suppose que je l'utilise mal.

Version installée. mongo_mapper (0.14.0, 0.13.1)

Répondre

0

Un utilisateur sur le groupe Google MongoMapper m'a pointé dans la bonne direction

@products = Product.where(
'$text' => {'$search' => @search_string}).fields(:score => {'$meta' => "textScore"})