mongo 常用查询方法 pymongo mongoengine
1.mongoengine 查询返回指定列(指定字段) scalar
from models import UserDayStat, UserDetails userdaystat = UserDayStat.objects(date="2020-06-30", day_age=0).scalar("uid") userdetail = UserDetails.objects(create_date="2020-06-30").scalar("id") l1 = set(userdetail) - set(userdaystat) print(l1)
2.mongoengine 排序
#根据条件后按照时间排序 -create_at 倒序 customerdemo = CustomerDemo.objects(create_at__gte = 1634092130.554208).order_by("-create_at") #按照时间排序 customerdemo = CustomerDemo.objects.order_by("-create_at")
3.mongoengine 分页
# 排序 跳过多个条 限制多少条 customerdemo = CustomerDemo.objects().skip(50).limit(50) customerdemo2 = CustomerDemo.objects(create_at__gte = 1634092130.554208).order_by("-create_at").skip(50).limit(50)
4.mongoengine 常用方法 原文出处 http://www.php.cn/mysql-tutorials-133672.html
register_time__gte 大于等于 register_time__gt 大于 register_time__lt 小于 * ne – 不相等 * lt – 小于 * lte – 小于等于 * gt – 大于 * gte – 大于等于 * not – 取反 * in – 值在列表中 * nin – 值不在列表中 * mod – 取模 * all – 与列表的值相同 * size – 数组的大小 * exists – 字段的值存在 order_by - 排序 skip - 跳过 limit - 限制多少条
5.mongo随机取N条数据 $sample
pipeline = [ {'$match': {'date': {'$gte': "2019-12-20", '$lte': "2019-12-29"}}}, {'$project': {'_id': 0, 'device_id': 1}}, {'$sample': {'size': 100}} ] # device_id 列表 userdaystat = UserDayStat.objects().aggregate(*pipeline) for user in userdaystat: device_id_list.append(user.get("device_id"))
6.mongo查找并更新原子操作 find_and_modify
Mongodb 5+ find_and_modify已被移除,并用3个选项代替: find_one_and_update find_one_and_delete find_one_and_replace # new 是否返回更新后的数值 seq = cls.collection.find_and_modify(query=query, update={'$inc': {'points': points}}, new=new, upsert=upsert) # 也可以用update_one query = {"user_id": user_id, "raffle_activity_id": raffle_activity_id} # 原子性操作如何查询不存在则插入 已存在返回false result = cls.collection.update_one( query, { '$setOnInsert': raffle_result }, upsert=True ) query = {"user_id": user_id, "raffle_activity_id": raffle_activity_id} # 原子性操作如何查询不存在则插入 已存在返回false result = cls.collection.update_one( query, { '$set': {"a": 1}, '$setOnInsert': raffle_result }, upsert=True )
7.mongo 删除某个字段
//例如要把User表中address字段删除 db.User.update({},{$unset:{'address':''}},false, true) criteria:查询条件 objNew:update对象和一些更新操作符 upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。 multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。 cls.collection.update_one(query, {"$unset": {"_password": ""}})