目前有3个集合 user consume recharge
只想彻底的修改User集合 而非像lookup一样创建个临时的集合,有没有什么效率高的方法,毕竟数据较多。
目前用的聚合$replaceRoot
的$mergeObjects
方法可以实现 但是速度太慢 CPU占用率极高
user = db.get_db_user()
recharge = db.get_db_recharge()
consume = db.get_db_consume()
lookup1 = {'$lookup': {
'from': 'recharge',
'localField': '_id',
'foreignField': 'uid',
'as': 'recharge'
}}
lookup2 = {'$lookup': {
'from': 'consume',
'localField': '_id',
'foreignField': 'uid',
'as': 'consume'
}}
replaceRoot1 = {'$replaceRoot': {'newRoot': {'$mergeObjects': [{'$arrayElemAt': ['$recharge', 0]}, '$$ROOT']}}}
replaceRoot2 = {'$replaceRoot': {'newRoot': {'$mergeObjects': [{'$arrayElemAt': ['$consume', 0]}, '$$ROOT']}}}
pipeline = [lookup1, lookup2, replaceRoot1, replaceRoot2]
result = user.aggregate(pipeline)
num = 0
for i in result:
num = num + 1
pprint.pprint(i)
print(num)