【问题标题】:Aggregation: Mongodb aggregation query example聚合:MongoDB聚合查询示例
【发布时间】:2021-09-27 17:00:34
【问题描述】:

记录是数据库:

[
  {
    "title": "title1",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title2",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title3",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  }
]

预期输出:

{"tag":"tag1", "titles":["title1","title2","title3"], "size":3}
{"tag":"tag2", "titles":["title2","title4"], "size":2}

有人可以帮助进行聚合查询吗?

【问题讨论】:

  • 您能否用您尝试过的内容更新您的问题,并将问题标题更新为有意义的标题。
  • 我正在尝试使用我提到的记录中的聚合以这种格式获取输出:{"tag":"tag1", "titles":["title1","title2", "title3"], "size":3} 我尝试了多个标题,但它不允许我发布问题。
  • 您的示例输入中没有“title4”。请提供有效的样本数据和结果。
  • 所有tags 具有相同的值。您如何期望不同的文件作为结果?

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

你可以使用组

  • $unwind 解构数组
  • $group 重新组合基于标签
  • $project 显示所需的输出

这是代码,

db.collection.aggregate([
  { "$unwind": "$tags" },
  {
    "$group": {
      "_id": "$tags",
      "titles": { "$push": "$title" }
    }
  },
  {
    $project: {
      tag: "$_id",
      titles: 1,
      size: { $size: "$titles" },
      _id: "$$REMOVE"
    }
  }
])

工作Mongo playground

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2021-06-02
    相关资源
    最近更新 更多