使用$ text从mongodb获取exect匹配和匹配的数据

时间:2016-12-07 13:15:28

标签: angularjs node.js mongodb mongodb-query debug-mode

我试图在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调用应该是一次)

1 个答案:

答案 0 :(得分:1)

您可以使用匹配的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

编辑:如果使用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调用的服务。