# coding=utf-8 import os import sys import time import datetime import pymongo from urllib import parse import django BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings') django.setup() from apps.DeviceCount.models import CbdPhoto user = parse.quote_plus("root") passwd = parse.quote_plus("yfkj@6020") # 账号密码方式连接MongoDB | "mongodb://用户名:密码@公网ip:端口/" myclient = pymongo.MongoClient("mongodb://{0}:{1}@8.136.98.49:57017/".format(user,passwd)) db = myclient.smartfarming device = db.sa_device cbdphoto_a_collection = db.sa_device_cbdphoto cbdphoto_b_collection = db.sa_device_cbdphoto cbdphoto_c_collection = db.sa_device_cbdphoto def main(): now = time.time() # 过去 16.5 小时间戳 last = int(now) - 16.5 * 3600 date_format = datetime.datetime.fromtimestamp(now).strftime("%Y-%m-%d") query = [ { "$match": { "addtime":{ "$gte": last } } }, { "$group": { "_id": "$device_id", "count": {"$sum": 1} } }, { "$sort": {"count": -1} } , { "$match": { "count": { "$gte": 100 } } } ] a_result = cbdphoto_a_collection.aggregate(query) a_result_lst = list(a_result) ids = [int(i.get("_id")) for i in a_result_lst] devices = device.find({"id": {"$in": ids}}, {"device_id": 1, "id": 1, "_id": 0}) id_de = { str(i.get("id")): i.get("device_id") for i in list(devices) } for k in a_result_lst: id = k.get("_id") org_photo_ct = k.get("count") device_id = id_de.get(id) cbd_photo, is_created = CbdPhoto.objects.get_or_create( day = date_format, device_id = device_id, defaults={ "day": date_format, "device_id": device_id, "org_photo_ct": org_photo_ct } ) print(cbd_photo, is_created) myclient.close() if __name__ == "__main__": main()