2016-12-07 66 views
0

我正在嘗試在MongoDB中使用以下查詢。
1) db.products.createIndex({name:「text」,category.name':「text」})
這將創建一個索引。

2)現在我的查詢是
db.products.find({$文字:{$搜索: 「日月掛毯」}})
這將根據太陽,月亮,和Tapestry帶來數據。

3)但我想要得到這樣的數據。
          一)首先在exect比賽的所有數據行 日月掛毯
          B)那麼太陽,月亮和後Tapestry將顯示

(注意:數據庫調用應該是一次)

回答

1

您可以使用匹配textSco重新排序的結果集:既然你有2個文本索引

db.products 
     .find({ $text : { $search : "Sun moon Tapestry" } }, { score: { $meta: 'textScore' } }) 
     .sort({score:{$meta: "textScore"}}) 

,你還可以定義權重namecategory.namehttps://docs.mongodb.com/v3.2/tutorial/control-results-of-text-search/

PS:沒有什麼相關的angularjs

編輯:如果你使用的貓鼬查詢保持不變,你要查詢你的模型

YourProduct 
     .find({ $text : { $search : "Sun moon Tapestry" } }, { score: { $meta: 'textScore' } }) 
     .sort({score:{$meta: "textScore"}}) 
     .exec(function (err, data) { 
      if (err) 
       res.json(err); 
      else { 
       res.json(data) 
      } 
     }); 

對於角度積分即可創建一個使用$ http https://docs.angularjs.org/api/ng/service/$http的服務並執行您的ajax調用。

+0

這看起來不錯,並得到預期的結果。這只是在我的終端工作,你可以請求在angularjs中插入,而發送查詢來表達以獲取結果。這真是令人印象深刻。 –

+0

請參閱我的編輯。 – alfredopacino

+0

是的,我使用過這種類似的東西,也許我在代碼中的某個地方犯了錯誤,因爲在單個數據庫調用中產品條件很多。當我解析複雜的代碼結構時,它在我的終端中工作會遵循它。再次感謝!!。 –