# !/usr/bin/python3
# encoding=utf-8
import db
from pymongo import MongoClient
user = db.get_db_user()
recharge = db.get_db_recharge()
consume = db.get_db_consume()
client = MongoClient('localhost', 27017)
db = client.test
col_new = db.new
lookup1 = {'$lookup': {
'from': 'recharge',
'localField': '_id',
'foreignField': 'uid',
'as': 'recharge'
}}
lookup2 = {'$lookup': {
'from': 'consume',
'localField': '_id',
'foreignField': 'uid',
'as': 'consume'
}}
# lookup 关联表匹配uid
replaceRoot1 = {'$replaceRoot': {'newRoot': {'$mergeObjects': [{'$arrayElemAt': ['$recharge', 0]}, '$$ROOT']}}}
replaceRoot2 = {'$replaceRoot': {'newRoot': {'$mergeObjects': [{'$arrayElemAt': ['$consume', 0]}, '$$ROOT']}}}
# replaceRoot 提升到顶级并替换所有其他字段
# mergeObjects 将多个文档合并为一个文档
# arrayElemAt 返回指定数组索引处的元素
# ROOT 系统变量 引用当前正在聚合管道阶段中处理的根文档,即顶级文档
project = {'$project': {
'_id': 1,
'nickname': 1,
'phone': 1,
'regDate': 1,
'lastLogin': 1,
'balance': 1,
'totalRecharge': 1,
'jcode': 1,
'consume.amount': 1,
'consume.consumeDate': 1,
'recharge.real': 1,
'recharge.amount': 1,
'recharge.from': 1,
'recharge.rechargeDate': 1,
'recharge.tradeNo': 1
}}
# project 筛选需要保留字段
pipeline = [lookup1, lookup2, replaceRoot1, replaceRoot2, project]
result = user.aggregate(pipeline)
num = 0
for i in result:
num = num + 1
# col_new.insert_one(i)
print(num)
print(i)
打印result的元素 以及插入到new集合 都是在101个元素时就不再进行。不知道是什么原因。
user集合内元素个数没问题 pipeline条件删除了几个也不行!
关键是昨天没这毛病 代码还传到github备份过 今天在project里增加了个字段,把昨天的new集合删了再写入就一直不行了。
@欧兜兜是素姀
昨天晚上开了一晚上 今天早上发现插入好了 但是没有打印并且报错 但是new表里是12020条数据