我有一个词典数据库,其含义位于一个名为"germanTranslations"的数组中.我希望获得以某个子字符串开头的术语,并根据结果的字符串长度对它们进行排序.(用于搜索栏自动完成.)

例如:

{id:0, germanTranslations:["Diagnosekit","Testkit"]}
{id:1, germanTranslations:["Ausprobieren", "Testen", "Probe", "Test", "Versuch"]}
{id:2, germanTranslations:["Testament","Bibel"]}

我希望结果能投射到

{id:1, germanTranslations: "Test"}
{id:1, germanTranslations: "Testen"}
{id:0, germanTranslations: "Testkit"}
{id:2, germanTranslations: "Testament"}

我try 使用此语法(目前仅使用指南针)

Filter: {germanTranslations:{$regex:/^test/i}}
Project: {"germanTranslations":1,"result_length":{$strLenCP: "germanTranslations.$"}}
Sort: {"result_length":1}

它将"germanTranslations.$"视为文字字符串,但"$germanTranslations.$"给出一个语法错误,而"$germanTranslations"是一个数组而不是字符串.我try 使用arrayElemAt,但我不知道如何才能获得结果的索引.

推荐答案

germanTranslations数组解构为多个文档的预期结果需要$unwind阶段.这应该在聚合管道中完成.

  1. $match

  2. $unwind-将germanTranslations数组解构为多个文档.

  3. $match个 - Filter the regex-matched documents.

  4. $project

  5. $sort

db.collection.aggregate([
  {
    $match: {
      germanTranslations: {
        $regex: "^test",
        $options: "i"
      }
    }
  },
  {
    $unwind: "$germanTranslations"
  },
  {
    $match: {
      germanTranslations: {
        $regex: "^test",
        $options: "i"
      }
    }
  },
  {
    $project: {
      "germanTranslations": 1,
      "result_length": {
        $strLenCP: "$germanTranslations"
      }
    }
  },
  {
    $sort: {
      "result_length": 1
    }
  }
])

Demo @ Mongo Playground

Mongodb相关问答推荐

在一个视图中连接两个集合MongoDB;展开有什么作用?

为什么 mongoose 在 mongodb 中找不到我的数据

Mongodb聚合查找异常值

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

在推入 mongodb 时自动填充 golang struct 中的 created_at 和 updated_at

替换 MongoDB 中数组中的嵌入文档

如何在 Mongoose 中定义一个通用的嵌套对象

MongoDB获取聚合查询的executionStats

mongodump 是否锁定数据库?

使用 nodejs/mongoose 部分更新子文档

无法将 $match 运算符用于带有 ObjectId 的 mongodb/mongoose 聚合

使用管道聚合的 Spring Data MongoDB 查找

将 JSON 与 MongoDB 一起使用?

mongo - 如何查询嵌套的 json

如何使用 MongoDB 建模 likes投票系统

如何使用node.js http服务器从mongodb返回大量行?

docker 在不同的端口上运行 mongo 映像

是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

Mongodb - 如何在多个字段中查找字符串?