使用 $text 从 mongodb 获取完全匹配和匹配的数据
Get exect match and matched data from mongodb using $text
我正在尝试在 MongoDB 中使用以下查询。
1) db.products.createIndex({ 名称: "text",category.name':"text"})
这将创建一个索引。
2) 现在我的查询是
db.products.find({$text:{$search:"Sun moon Tapestry"}})
这将根据太阳、月亮和 Tapestry 带来数据。
3) 但我想得到这样的数据。
a) 第一个完全匹配的所有数据行
日月挂毯
b) 然后太阳、月亮和挂毯会出现
(注意:数据库调用应该是一次)
您可以使用匹配的 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
编辑:如果您使用猫鼬,查询保持不变,您必须查询您的模型
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)
}
});
对于 angular 集成,您可以创建一个使用 $http https://docs.angularjs.org/api/ng/service/$http 的服务并进行 ajax 调用。
我正在尝试在 MongoDB 中使用以下查询。
1) db.products.createIndex({ 名称: "text",category.name':"text"})
这将创建一个索引。
2) 现在我的查询是
db.products.find({$text:{$search:"Sun moon Tapestry"}})
这将根据太阳、月亮和 Tapestry 带来数据。
3) 但我想得到这样的数据。
a) 第一个完全匹配的所有数据行
日月挂毯
b) 然后太阳、月亮和挂毯会出现
(注意:数据库调用应该是一次)
您可以使用匹配的 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
编辑:如果您使用猫鼬,查询保持不变,您必须查询您的模型
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)
}
});
对于 angular 集成,您可以创建一个使用 $http https://docs.angularjs.org/api/ng/service/$http 的服务并进行 ajax 调用。