2016-12-07 62 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

是的,我使用过这种类似的东西,也许我在代码中的某个地方犯了错误,因为在单个数据库调用中产品条件很多。当我解析复杂的代码结构时,它在我的终端中工作会遵循它。再次感谢!!。 –