Skip to content

Instantly share code, notes, and snippets.

@ronfe
Created October 13, 2015 13:11
Show Gist options
  • Save ronfe/734903c1a7d1cd82ce00 to your computer and use it in GitHub Desktop.
Save ronfe/734903c1a7d1cd82ce00 to your computer and use it in GitHub Desktop.
__author__ = 'ronfe'
# _*_ coding: utf8 _*_
from pymongo import MongoClient
from bson.objectid import ObjectId
import datetime
# link to db
dbClient = MongoClient('mongodb://10.8.8.8:27017')
db = dbClient['matrix-yangcong-prod25']
# open collections
points = db['points']
users = db['users']
def calcNewAndRet(startDate):
weekNew = 0
weekRet = 0
unActList = []
dateNow = 0
while dateNow < 7:
initDate = startDate + datetime.timedelta(days=dateNow)
endDate = initDate + datetime.timedelta(days = 1)
startDoc = points.find_one({"createdBy": {"$gte": initDate}})
startId = startDoc['_id']
print('start Id = %s', startId)
endDoc = points.find_one({"createdBy": {"$gte": endDate}})
endId = endDoc['_id']
print('end id = %s', endId)
pipeLine = [
{"$match": {"_id": {"$gte": startId, "$lt": endId}}},
{"$group": {"_id": "$user"}}
]
activityUsers = list(points.aggregate(pipeLine))
activityUsers = [d['_id'] for d in activityUsers]
# Calc ret
activityUsers = set(activityUsers)
retUsers = activityUsers.intersection(set(unActList))
weekRet += len(retUsers)
unActList = set(unActList).difference(retUsers)
# Add new daily users
dayNewUsers = []
query = users.find({"usefulData.registDate": {"$gte": initDate, "$lt": endDate}})
for doc in query:
dayNewUsers.append(doc['_id'])
dayNewUsers = set(dayNewUsers)
print dayNewUsers
weekNew += len(dayNewUsers)
unActList = unActList.union(dayNewUsers)
print weekNew
print weekRet
dateNow += 1
print '==============='
print weekNew
print weekRet
startDate = datetime.datetime(2015,10,1)
calcNewAndRet(startDate)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment