Как использовать $ addToSet стать массивом с объектами? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть коллекция с большим количеством документов.

Моя структура документа выглядит так:

Вот API может получить данные JSON:

https://obscure -reaches-65656.herokuapp.com / апи? Город = TaipeiEast и театр = 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 голосов
/ 03 июля 2018

Вы можете попробовать ниже агрегации

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"
        }
      }
    }
  }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...