首页 > 解决方案 > 如何在MongoDB中以数组形式返回某些字段?

问题描述

我有 Mongodb 数据库中的书籍列表。我想返回它的author, brand,type inarrayAny Structurewhich 我可以在我的前端使用它React来创建Filter

游乐场(我试过):https ://mongoplayground.net/p/eVane4iBN_j


数据库结构:

[
  {
    "_id": "1",
    "title": "Lorem ipsum dolor sit",
    "brand": "Apple",
    "type": "Comedy",
    "author": "Mark",
    "price": 535
  },
  {
    "_id": "2",
    "title": "Lorem ipsum dolor sit",
    "brand": "Mango",
    "type": "Horror",
    "author": "David",
    "price": 695
  },
  {
    "_id": "3",
    "title": "Lorem ipsum dolor sit",
    "brand": "Orange",
    "type": "Horror",
    "author": "Carl",
    "price": 695
  },
  {
    "_id": "4",
    "title": "Lorem ipsum dolor sit",
    "brand": "Mango",
    "type": "Horror",
    "author": "Carl",
    "price": 69
  },
  {
    "_id": "5",
    "title": "Lorem ipsum dolor sit",
    "brand": "Orange",
    "type": "Drama",
    "author": "David",
    "price": 695
  }
]

期望的输出:

{
  "brand"  : ["Apple","Mango","Orange"],
  "type"   : ["Horror","Drama","Comedy"],
  "author" : ["David","Mark","Carl"]
}

我尝试使用$projectto return only brandtype并且author

我应该使用哪个 Aggregation 框架来制作这个?我真的需要你们的帮助,请帮帮我...

标签: arraysmongodbaggregation-frameworkprojectfacet

解决方案


您可以使用$group$addToSet

  • $group什么都不使用,_id因为您可以获得任何东西并$addToSet避免重复。
db.collection.aggregate([
  {
    "$group": {
      "_id": "",
      "brand": {
        "$addToSet": "$brand"
      },
      "type": {
        "$addToSet": "$type"
      },
      "author": {
        "$addToSet": "$author"
      }
    }
  }
])

这里的例子


推荐阅读