如何使用$ addToSet成为带有对象的数组?

时间:2018-07-03 07:12:40

标签: mongodb

我有一个收藏很多的文件。

我的文档结构如下:

这是一个可以获取json数据的api:

https://obscure-reaches-65656.herokuapp.com/api?city=TaipeiEast&theater=Centuryasia

enter image description here

我想查询没有重复的enName的数据,所以我尝试使用$addToSet

这是我的查询命令:

db.getCollection('Keelung').aggregate([
  { "$match": {
        "theater": "Centuryasia"
      }
  },
  { "$unwind": '$movie' },
  { "$group": {
      "_id": "$_id",
      "enName": {
        "$addToSet": "$movie.enName" 
       },
       "photoHref": {
         "$addToSet": "$movie.photoHref" 
       }
    } 
  }
])

查询结果将如下所示: enter image description here

我希望结构可以像这样:

movie: [
  { enName: "value", photoHref: "value"},
  { enName: "value", photoHref: "value"},
  ...
]

我尝试添加$push

db.getCollection('Keelung').aggregate([
      { "$match": {
            "theater": "Centuryasia"
          }
      },
      { "$unwind": '$movie' },
      { "$group": {
          "_id": "$_id",
          "enName": {
            "$addToSet": "$movie.enName" 
           },
           "photoHref": {
             "$addToSet": "$movie.photoHref" 
           }
        },
        "movie": {
          "$push": {
            "enName": "$enName",
            "photoHref": "$photoHref",
          }
        } 
      }
    ])

它不起作用。

任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下汇总

db.collection.aggregate([
  { "$match": { "theater": "Centuryasia" }},
  { "$unwind": "$movie" },
  { "$group": {
      "_id": "$_id",
      "theater": { "$first": "$theater" },
      "phone": { "$first": "$phone" },
      "geometry": { "$first": "$geometry" },
      "theaterPhoto": { "$first": "$theaterPhoto" },
      "address": { "$first": "$address" },
      "theaterCn": { "$first": "$theaterCn" },
      "movie": {
        "$addToSet": {
          "enName": "$movie.enName",
          "photoHref": "$movie.photoHref"
        }
      }
    }
  }
])