Проблема
Итак, у меня есть документ MongoDB, который выглядит так:
Awards
:
[
{
"year": "2017",
"winners": [
{
"name": "james",
"id": 1
},
{
"name": "adam",
"id": 2
}
]
},
{
"year": "2018",
"winners": [
{
"name": "mary",
"id": 3
},
{
"name": "jane",
"id": 4
}
]
}
]
И я в основном пытаюсь расширить список победителей за каждый год, чтобы схема была примерно (year, winner_id)
, которую я могу позже использовать для присоединения, которое я планирую сделать. Что-то вроде этого:
[
{
"year":"2017",
"winner_id":1
},
{
"year":"2017",
"winner_id":2
},
{
"year":"2018",
"winner_id":3
},
{
"year":"2018",
"winner_id":4
}
]
Что я пробовал
поэтому интуитивно я ищу что-то вроде $unwind
, но проблема в том, что winners
не является массивом.
Я пробовал
db.awards.aggregate({'$unwind':'$winners.id'})
, но это не сработало. (дал пустой результат)Так что впоследствии я подумал
db.awards.aggregate({'$unwind': {'$objectToArray':'$winners.id'}})
, но это тоже не сработало. (выдал ошибку)Согласно этот пост я должен сделать это:
db.awards.aggregate(
{ '$project': {
_id: 1,
'winners': 1
} },
{'$unwind': '$winners'},
{'$unwind': '$winners.id'}
)
но даже это не сработало, я все равно получаю встроенный документ для каждого winner
Какие-нибудь мысли?
winners
по-прежнему является объектом, а не массивом. Поэтому это все еще недействительный JSON. Вы действительно уверены, чтоwinners
не является массивом? - person thomas   schedule 15.11.2019