2016-11-11 56 views
3

當MongoDB的API直接交互,你可以這樣做全文搜索和排序結果的評分:

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

你如何翻譯這回環過濾器?

我曾經嘗試這樣做,它失敗:

{ 
     "where":{ 
      "$text" : { "search":"some search phrase" } 
     }, 
     "fields": { 
      "score":{ 
       "$meta":"textScore" 
      } 
     }, 
     "orderby":"score ASC" 
} 

不幸的是,結果:

[ 
    {}, 
    {}, 
    {} 
] 

當我看到MongoDB的曲線輸出,我發現,環回產生這個查詢:

"filter" : { 
     "$text" : { 
      "$search" : "some search phrase" 
     } 
    }, 
    "sort" : { 
     "score" : 1 
    }, 
    "projection" : { 
     "score" : 1 
    } 

因此它將項目「分數」看作是一個普通字段而不是$ meta字段......這是排除所有其他字段的結果。

如何獲得迴環生成正確的查詢執行時應該看起來像這樣的:

"filter" : { 
     "$text" : { 
      "$search" : "some search phrase" 
     } 
    }, 
    "sort" : { 
     "score" : { 
      "$meta" : "textScore" 
     } 
    }, 
    "projection" : { 
     "score" : { 
      "$meta" : "textScore" 
     } 
    } 

THX。

回答

0

我設法通過使用聚合而不是find方法在Loopback中工作。

const db = Vehicletest.getDataSource().connector; 
const collection = db.collection(Vehicletest.modelName); 
var cursor = collection.aggregate([{ $match: { $text: { $search: searchText } } }, { $sort: { score: { $meta: "textScore" } } }, { $project: { name: 1 } }], {cursor: { batchSize: 1 }}); 
cursor.toArray(function(err, docs){ 
    console.log(docs); 
}); 

如果你看看mongo文檔中的textSearch。有一個小節叫做「文本搜索聚合」,它有更多的細節。希望這可以幫助!

相關問題