私信  •  关注

bagerard

bagerard 最近创建的主题
bagerard 最近回复了
2 年前
回复了 bagerard 创建的主题 » 在Python 3.9.6上安装pyzmail36时出错

将MongoEngine升级至>=0.20还可以作为Python2支持来解决这个问题(因此 use_2to3 )下降了0.20

4 年前
回复了 bagerard 创建的主题 » 组合MongoDb客户端:pyMongo和MongoEngine

目前不可能使用现有的 Pymongo 要连接的客户端 MongoEngine 但是您可以做相反的事情;如果您连接MongoEngine,您可以检索它的底层pymongo客户机或数据库实例。

from mongoengine import connect, get_db, Document, StringField

conn = connect()    # connects to the default "test" database on localhost:27017

print(conn)    # pymongo.MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())

db = get_db()  # pymongo.Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary()), u'test')
print(db)

class Person(Document):
    name = StringField()


coll = Person._get_collection()
print(coll)    # pymongo.Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary()), u'test'), u'person')
4 年前
回复了 bagerard 创建的主题 » 在MongoDB中查询对象内的嵌套文档

如果我理解正确的话,你需要所有的票,来自所有具有特定角色的用户。 由于票证(通过使用embeddeddocument)嵌套在用户的文档中,一种方法是:

admin_tickets = []
for user in User.objects(role='admin'):
    admin_tickets += user.tickets

或者如果你想提高一点性能并且不需要用户信息,你可以使用 scalar 以下内容:

admin_tickets = []
for user_tickets in User.objects(role='admin').scalar('tickets'):
    admin_tickets += user_tickets
4 年前
回复了 bagerard 创建的主题 » python,遍历dictionary对象中的多个列表以查找特定值

据我所知,你需要选择 value 项目中的字段 protocol_parameters 包含name=identifier的。

你可以用 next() 从中查找第一项 协议\参数 符合该条件的列表。见下文:

records = [{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 1, 'value': 'x.x.x.x'}]},
{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 0, 'value': 'y.y.y.y'}, {'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}]},
{'internal': False, 'protocol_parameters': [{'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}, {'name': 'identifier', 'id': 0, 'value': 'z.z.z.z'}]}
]

for record in records:
     identifier_param = next((prot_param for prot_param in record['protocol_parameters'] if prot_param['name']=='identifier'), None)
     if identifier_param:
         print(identifier_param['value'])

印刷品

x.x.x.x
y.y.y.y
z.z.z.z