【问题标题】:Aggregate search function errors when executed [closed]执行时聚合搜索功能错误[关闭]
【发布时间】:2020-09-30 04:04:49
【问题描述】:

我显然不了解 mongoose 中的聚合函数。我正在尝试查询 productCode 字段并返回所有产品。下面的代码返回错误;

Product.aggregate(...).search 不是函数。

我在这里做错了什么?我正在使用猫鼬。

products = await Product.aggregate().search({
    text: {
      query: 'text_supplied',
      path: 'productCode'
    }
  });

更新日期

查询中的文本来自输入字段。我想从包含我从输入字段传递的文本的产品集合中返回所有文档。这是用于客户端的自动完成下拉菜单。例如。

输入字段中的文本:'1';

MongoDB收藏:Products

[
  {
    productCode: '1A'
  },
  {
    productCode: 'C1'
  },
  {
    productCode: 'C2'
  }
];

在这种情况下,我想退回所有包含“1”的产品。在那里它返回'1A'和'C1'

【问题讨论】:

  • 你的猫鼬版本是什么?
  • "猫鼬": "^5.9.20"
  • 试试await Product.aggregate().search({ text: { query: 'text_supplied', path: 'productCode' } }).exec();
  • 用当前问题更新问题并使其包含一个问题。

标签: mongodb mongoose mongodb-atlas-search


【解决方案1】:

atlas 搜索聚合阶段仅在 5.10.0 版本的 mongoose 中添加。

feat(aggregate):为 Atlas 文本搜索添加 Aggregate#search() #9115

根据您发布的用例,您不想使用text,而是想要regex 搜索:

Product.aggregate([
   {
      "$search": {
         "regex": {
            "path": "productCode",
            "query": ".*1.*"
         }
      }
   }
])

我可以进一步解释,但这不是最初的问题,但是我建议您在 analyzers 上阅读更多内容,因为它们在索引和查询中的作用至关重要。

【讨论】:

  • 我没有使用 Atlas。我认为这就是为什么这不起作用。
  • 不,它不起作用,因为您的猫鼬版本需要升级,一旦升级,您将收到一个不同的错误,指出您没有图集文本索引,这是要求之一。
  • 对不起,我确实更新了,错误已更改为 'MongoError: Unrecognized pipeline stage name: '$search''
  • Atlas 搜索在 atlas 之外不起作用,但在这种情况下,我会使用正则表达式而不是全文搜索,因此这是正确的答案。
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 2012-11-28
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多