当前位置: 首页 > 知识库问答 >
问题:

如何根据node.js中的$regex还是$text对Mongoose结果进行排序?

梁丘伟
2023-03-14

我有一个REST API调用,比如/item/search,它附加了一些查询参数。

用户可以搜索整个术语或仅搜索术语的3个或更多字符

node.js导出函数如下所示,

exports.getSearchedItems = function(req,res){
var searchText = req.query.q;
var searchedString = searchText.replace(/ /g,"|");

var nameRegex = new RegExp('\\b' + searchedString + '.*', 'i');

Item.find()
    .or([
         {$text: {$search: searchText } },
         {'name': {$regex: nameRegex } },
         {'score':{'$meta': 'textScore'}
        ]
       )
    .sort({'score':{'$meta': 'textScore'}}
    .exec(function(err, items){
         if(err) console.log('Error Finding Query ' +err);
            res.send(items);
         });
};

项目/search?q=new+2这样的查询,

共有1个答案

薛墨一
2023-03-14

MongoDB的find()方法可以使用第二个可选参数来指示返回哪些字段,在$text搜索的情况下,特殊的投影字段$meta允许您返回匹配文档的分数,以便对其进行排序。

尝试修改find()查询,将查询和$meta投影包含为find()参数,而不是或()方法:

Item.find(
    { 
        "$or":[ {"$text": {"$search": searchText } }, {"name": {"$regex": nameRegex } } ]
    }, 
    { 
        "score" : { "$meta" : "textScore"} 
    })
  .sort({"score": { "$meta": "textScore"} })
  .exec(function(err, items){
      if(err) console.log("Error Finding Query " + err);
      res.send(items);
  });
 类似资料:
  • 问题内容: 假设我将这样的文档存储在ElasticSearch中: 假设我使用location = CA进行搜索,如何根据“标签”中项目的数量对结果进行排序? 我想在首页中列出标签数量最多的人。 问题答案: 您可以为包含标签数量的其他字段建立索引,然后在其上轻松地对结果进行排序。否则,如果您愿意在查询时付出一点性能成本,那么有个不错的解决方案不需要重新索引数据:您可以根据如下脚本进行排序: 从基于

  • 我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。

  • 问题内容: 我正在用Node.js和猫鼬编写一个Webapp。如何对通话结果进行分页?我想要一个与SQL 相当的功能。 问题答案: 在通过Rodolphe提供的信息仔细研究了Mongoose API之后,我想出了以下解决方案:

  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序

  • 问题内容: 我有一些文档有两个字段:文本,计数。 我曾经为文档编制索引,现在我想在文本中搜索并按降序将结果按计数排序。我怎样才能做到这一点? 问题答案: Apache Lucene的默认搜索实现返回按分数(最相关的结果排在最前),然后按ID(最旧的结果排在前)的结果。 可以在查询时使用附加的Sort参数自定义此行为。 TopFieldDocs Searcher#search(查询查询,过滤器过滤器

  • 问题内容: 如何使用树的值而不是键对树图进行排序? 问题答案: 您不能这样做,因为TreeMap的比较器仅针对键运行,例如,参见this 构造函数。 无论如何,您可以使用多个Collections,使用TreeMap(或HashMap)通过键查找元素,并具有SortedSet来迭代值。