0

我正在尝试在 MongoDB 中使用以下查询。
1) db.products.createIndex({ name: "text",category.name':"text"})
这将创建一个索引。

2)现在我的查询是
db.products.find({$text:{$search:"Sun moon Tapestry"}})
这将根据太阳、月亮和 Tapestry 带来数据。

3)但我想得到这样的数据。
      a)首先在精确匹配太阳月亮挂毯中的所有数据行
      b)然后太阳,月亮和挂毯将出现

(注意:数据库调用应该是一次)

4

1 回答 1

1

您可以使用匹配的 textScore 对结果集进行排序:

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

由于您有 2 个文本索引,您还可以为 和 定义权namecategory.namehttps://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 调用。

于 2016-12-07T13:41:50.213 回答