我正在与pymongo合作,在编写聚合查询之后
db.collection.aggregate([{'$project': {'Id': '$ResultData.Id','data' : '$Results.Data'}}])
我收到了目标:
{'data': [{'key': 'valid', 'value': 'true'},
{'key': 'number', 'value': '543543'},
{'key': 'name', 'value': 'Saturdays cx'},
{'key': 'message', 'value': 'it is valid.'},
{'key': 'city', 'value': 'London'},
{'key': 'street', 'value': 'Bigeye'},
{'key': 'pc', 'value': '3566'}],
是否有一种方法可以通过键名访问值?像那样{
db.collection.aggregate([{'$project':
{'Id': '$ResultData.Id',
'data' : '$Results.Data',
'city' : $Results.Data.city',
'name' : $Results.Data.name',
'street' : $Results.Data.street',
'pc' : $Results.Data.pc',
}}])
并接收所提供密钥的所有值
在以下来自mongoshell的查询中使用$elemMatch投影运算符:
输出:
使用PyMongo(获得相同的输出):
使用PyMongo聚合方法(得到相同的结果):
将接收到的对象命名为“
result
”,如果result['data']
始终是一个包含两个键(key
和value
)的字典列表,则可以使用key
作为键,使用value
作为值,将整个列表转换为字典。鉴于此语句有些混乱,下面是代码:从这里,
data['city']
将给你'London'
,data['street']
将'Bigeye'
等等。显然,这假定result['data']
中的key
值之间没有冲突。请注意,此字典(就像原始的result['data']
)只包含字符串,因此不要期望data['number']
是整数另一种方法是动态创建一个对象,将每个键值对作为属性保存,允许您使用以下语法:
data.city
,data.street
。。。但这需要更复杂的代码,并且是一种不太常见和稳定的方法相关问题 更多 >
编程相关推荐