我是使用pymongo的mongoDB新手。我正在尝试查询集合,并且还从字段中获取特定的孩子。这是我尝试过的:
import pymongo
import csv
from pymongo import MongoClient
connection = MongoClient()
db = connection.database
collection1 = db.data1
collection2 = db.data2
writer = csv.writer(open("Result_example.csv", "w"))
with open('Data_example.csv') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';')
for row in spamreader:
for rows in collection1.find({"_id": row[0]}, { "childs.first.name": 1}):
writer.writerow([row[0], rows.get("childs.first.name")])
数据库结构如下:
child
first
name
我想得到的名字是...任何想法?
谢谢!
答案 0 :(得分:0)
除了提供的示例结构中未对字段进行复数之外,以下查询看起来还不错。
for rows in collection1.find({"_id": row[0]}, { "child.first.name": 1}):
请注意 child
字段是单数。
rows
是对字典对象的引用,如下所示:
{
'child': {
'first': {
'name': 'Vorname'
}
}
}
rows.get("childs.first.name")
在None
中返回writer.writerow([row[0], rows.get("childs.first.name")])
您可以使用来检索名称
rows.get('child')。get('first')。get('name')
或
rows ['child'] ['first'] ['name']
您可以通过运行返回 document id 和 firstname 代替collection1.find({"_id": row[0]}, { "child.first.name": 1})
的聚合来保存这些嵌套键访问。
children_names = db.collection1.aggregate([
{
'$match': {'_id': ObjectId(row[0])}
},
{
'$replaceRoot': {'newRoot': {'_id': '$_id', 'first_name': '$child.first.name' }}
},
])
然后可以完成一次密钥访问。
for rows in children_names:
writer.writerow([row[0], rows.get("first_name")])