使用 $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 个文本索引,因此您还可以为 namecategory.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 调用。