我试图在MongoDB中使用以下查询
1) db.products.createIndex({name:“text”,category.name':“text”})
这将创建一个指数。
2)现在我的查询是
db.products.find({$ text:{$ search:“Sun moon Tapestry”}})
这将根据太阳,月亮和Tapestry带来数据。
3)但我希望得到这样的数据。
a)首先在exect匹配中的所有数据行
太阳月亮挂毯
b)然后在太阳,月亮和Tapestry出现之后
(注意:DB调用应该是一次)
答案 0 :(得分:1)
您可以使用匹配的textScore对结果集进行排序:
db.products
.find({ $text : { $search : "Sun moon Tapestry" } }, { score: { $meta: 'textScore' } })
.sort({score:{$meta: "textScore"}})
由于您有2个文本索引,因此您还可以为name
和category.name
定义权重。
https://docs.mongodb.com/v3.2/tutorial/control-results-of-text-search/
PS:没有任何相关的angularjs
编辑:如果使用Mongoose,查询保持不变,则必须查询模型
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调用的服务。