【问题标题】:Mongoose text index on nested schema field嵌套模式字段上的猫鼬文本索引
【发布时间】:2016-08-20 01:27:28
【问题描述】:

我有以下架构:

const Schema = ({
  metadata: {
    title: String,
    ...
  },
  ...

});

我希望在metadata.title 上创建一个文本索引。我可以在任何一级属性上成功创建文本索引,但我遇到了嵌套标题的问题。

我尝试了以下代码,但无济于事。我的语法错了吗?我对文档没有运气...

Schema.index({ 'metadata.title': 'text' });

搜索:

Schema
  .find(
    { $text : { $search : req.params.query } },
    { score : { $meta: "textScore" } })

【问题讨论】:

  • 开始赏金 - 但事实证明当前的答案解决了问题。将在那里奖励赏金。
  • 您对Schema.index({ 'metadata.title': 'text' }); 的原始尝试是正确的方法,并且在我尝试时效果很好。当前接受的答案只会创建传统索引,而不是文本索引。您将Schema 用于您的架构(和您的模型)有点令人困惑,因为您应该将该标识符名称保留为Schema 构造函数。
  • 是的,它在我的代码中被称为不同的东西,我只是在这里使用 Schema 作为占位符......对不起。是的,实际上我最初的尝试正如你所说的那样工作......我将赏金奖励给谁?
  • 我猜你只需要让赏金到期。但是你真的应该发布你自己的答案并接受它,或者至少从当前接受的答案中删除复选标记,因为那个答案是错误的。

标签: javascript node.js mongodb


【解决方案1】:

正如@JohnnyHK 所指出的,事实证明我最初的想法是正确的。我一定有其他错误导致索引无法正常工作...

【讨论】:

    【解决方案2】:

    const Schema = ({
      metadata: {
        title: {
          type: String,
          index: true
          }
        ...
      },
      ...
    
    });

    【讨论】:

    • 嗯...当我这样做时,猫鼬似乎会抛出一个错误。 TypeError: Undefined type undefined at metadata.index
    • 对不起。修正了我的答案。
    • 嗯。仍然不起作用,至少在我的搜索中没有。我添加了我的搜索方式,你能确定它仍然匹配吗?
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 2013-10-07
    • 2018-10-15
    • 2014-06-22
    • 2015-09-21
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多