Как построить массив «значений» из вложенной пары mongodb {'key': value}? - PullRequest
0 голосов
/ 26 сентября 2018

Ниже приведена база данных, которую я создал путем сопоставления одной базы данных с другой, используя точечную запись:

for ladders in season_ladders_db2.ladders.find({},{'tier.division.ladder_id':1}):
    db_ladder_id.ladders.insert_one(ladders)

Вывод:

{'_id': ObjectId('5baa8d09a4918a1cc0ed16e2'),
 'tier': [{'division': [{'ladder_id': 198440},
                        {'ladder_id': 197477},
                        {'ladder_id': 198936},
                        {'ladder_id': 197279},
                        {'ladder_id': 199169},
                        {'ladder_id': 197611},
                        {'ladder_id': 197365},
                        {'ladder_id': 197803},
                        {'ladder_id': 198683},
                        {'ladder_id': 197062}]},
          {'division': [{'ladder_id': 197053},
                        {'ladder_id': 198094},
                        {'ladder_id': 199170},
                        {'ladder_id': 198417},
                        {'ladder_id': 197792},
                        {'ladder_id': 197342},
                        {'ladder_id': 197507}]},
          {'division': [{'ladder_id': 197310},
                        {'ladder_id': 197620},
                        {'ladder_id': 197968},
                        {'ladder_id': 198774},
                        {'ladder_id': 197405},
                        {'ladder_id': 198366},
                        {'ladder_id': 197065},
                        {'ladder_id': 199163},
                        {'ladder_id': 197522},
                        {'ladder_id': 198550},
                        {'ladder_id': 198132},
                        {'ladder_id': 197780},
                        {'ladder_id': 198992}]}]}
{'_id': ObjectId('5baa8d0aa4918a1cc0ed16e3'),
 'tier': [{'division': [{'ladder_id': 197921}]}]}

Как использовать Python и PyMongo, как я могу построитьмассив просто значений 'ladder_id'?

Требуется вывод что-то вроде

[198440, 197477, 198936, ...] 

Есть ли способ передать эти значения в mongodb?возможно в другую коллекцию?Я хочу передать эти значения в вызов API.

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

В этом случае вам нужно распаковать ($unwind) значений и проект ($project) ladder_id в корень результата запроса.

db.getCollection('test').aggregate(
[
  {$unwind: '$tier'},
])

Этот запрос буквально раскручивается tier, что означает, что все division будут иметь свои tier.

{
    "_id" : ObjectId("5baace3569cb14ccb9e5dfc5"),
    "tier" : {
         "division" : [ 
            {
                "ladder_id" : 197921
            }
        ]
    }
}, {}, {}, .....

Затем вам нужно развернуть эти division s, чтобы у всех этих ladder_id s были свои tier и division.

db.getCollection('test').aggregate(
[
  {$unwind: '$tier'},
  {$unwind: '$tier.division'},
])

Результат:

{
    "_id" : ObjectId("5baace2769cb14ccb9e5df34"),
    "tier" : {
        "division" : {
            "ladder_id" : 198440
        }
    }
}, {}, {}, .....

Наконец, вы можете $project эти ladder_id с.

db.getCollection('test').aggregate(
[
  {$unwind: '$tier'},
  {$unwind: '$tier.division'},
  {$project: {ladder_id: '$tier.division.ladder_id'}},
])

Результат:

{
    "_id" : ObjectId("5baace2769cb14ccb9e5df34"),
    "ladder_id" : 198440
}, {}, {}, .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...