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": ""}})
复制代码

 

posted on   星河赵  阅读(1393)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2017-07-01 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示