Коллекция запросов и сортировки MongoDB Stitch - PullRequest
0 голосов
/ 13 января 2020

Я использую реагирующий нативный и mongoDB стежок. Я предполагаю, что когда я запускаю запрос с ключевым словом, результат должен быть отсортирован с наибольшим соответствием с ключевым словом,

Например, если я ищу Aqua, результат должен быть отсортирован как

  • Аква
  • Аква
  • Акватика
  • Экстракт акватики
  • Аква-вода
  • et c.

Я нашел документацию для этого (https://docs.mongodb.com/manual/reference/operator/projection/meta/)

db.collection.find(
   <query>,
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

Но не могу найти, как написать этот код для стежка mongodb,

Я пробовал как

const query = {
        name: {
            $regex: searchKeyword,
            $options: 'i', 
            //"$meta": "textScore"
        },
        score: { "$meta": "textScore" } // not sure where to put it , Saying unknown operator $meta 
    };
const options = {
        "sort": { "score": { $meta: "textScore" }}
    };

db.collection(itemNameDB).find( query, options).toArray()
            .then(results => {
            console.log(results)
})

Это сбой говорит «неизвестный оператор $ мета». Не нашел ни одного примера в документации по стежку mongdb.

Есть предложения?

1 Ответ

0 голосов
/ 21 января 2020

Это сбой, говорящий «неизвестный оператор $ meta». Не нашел ни одного примера в документации по стежкам mongodb.

Есть несколько способов сделать это. Один из способов - создать функцию Stitch , которая может быть вызвана из вашего приложения (React). В вашей функции вы можете вызвать db.collection.find () . Например:

exports = function(word){

     var coll = context.services.get("mongodb-atlas").db("dbName").collection("collName"); 
     var doc = coll.find(
        {"$text": {"$search": word}}, 
        {"score": {"$meta": "textScore"}}
     ).sort(
        {"score":{"$meta":"textScore"}}
     ).toArray();

     doc.forEach(element => console.log(JSON.stringify(element)));

     return doc; 
};

Эта функция выше должна распечатать что-то похожее на приведенное ниже, и вернуть массив в формате E JSON.

{"_id":"5e262bf99514bb2d81bb8735","item":"Aqua","score":1.1}
{"_id":"5e262c009514bb2d81bb8736","item":"Aquae","score":1}
{"_id":"5e262c109514bb2d81bb8739","item":"Aqua-water","score":0.75}

Пожалуйста обратите внимание, что для выполнения текстового поиска запросов у вас должен быть текстовый индекс в коллекции.

...