下面是我通过使用点符号将一个数据库映射到另一个数据库而创建的数据库:
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调用。
谢谢!
答案 0 :(得分:1)
在这种情况下,您需要将({$unwind
)个值和项目($project
)ladder_id
拆包到查询结果的根。
db.getCollection('test').aggregate(
[
{$unwind: '$tier'},
])
此查询实际上将展开tier
,这意味着所有division
都将拥有自己的tier
。
{
"_id" : ObjectId("5baace3569cb14ccb9e5dfc5"),
"tier" : {
"division" : [
{
"ladder_id" : 197921
}
]
}
}, {}, {}, .....
然后,您需要放开这些division
,以便所有这些ladder_id
拥有自己的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
}, {}, {}, .....