django 操作mongoDB Mongoengine教程(3)——数据查询
2015-10-16 15:24
781 查看
与Django一样,Document类都有一个 objects 属性。它用于将类与数据库关联起来。objects属性是一个QuerySetManager类型的对象,它的操作会返回一个QuerySet类型的对象。可以通过对QuerySet对象的迭代获取数据库中的数据。
可以在查询是指定过滤条件以获取想要的结果。例如想要查询英国的用户:
与Django类似,要查询引用的对象只需要使用双下划线即可。例如想要查询英国用户的论文:
与Django类似,MongoEngine同样也提供了一些条件语句。
ne - 不相等
lt - 小于
lte - 小于等于
gt - 大于
gte - 大于等于
not - 取反
in - 值在列表中
nin - 值不在列表中
mod - 取模
all - 与列表的值相同
size - 数组的大小
exists - 字段的值存在
例如查询年龄小于等于18岁的用户:
对于不同类型的数据提供了不同的条件语句。
跟传统的ORM一样,MongoEngine也可以限制查询结果的个数。一种方法是在QuerySet对象上调用limit和skip方法;另一种方法是使用数组的分片的语法。例如:
MongoEngine提供了一些数据库的聚合操作。
统计结果个数即可以使用QuerySet的count方法,也可以使用Python风格的方法:
其他的一些聚合操作。
求和:
求平均数:
有时需要将多个条件进行组合,前面提到的方法就不能满足需求了。这时可以使用MongoEngine的Q类。它可以将多个查询条件进行 &(与) 和 |(或) 操作。
例如下面的语句是查询所有年龄大于等于18岁的英国用户,或者所有年龄大于等于20岁的用户。
通过MongoEngine QuerySet对象的 exec_js 方法可以将javascript代码作为字符串发送给服务器端执行,然后返回执行的结果。
例如查询该数据库都有那些集合:
class User(Document): name = StringField() country = StringField() class Paper(Document): content = StringField() author = ReferenceField(User)
查询过滤
可以在查询是指定过滤条件以获取想要的结果。例如想要查询英国的用户:uk_users = User.objects(country='uk')
与Django类似,要查询引用的对象只需要使用双下划线即可。例如想要查询英国用户的论文:
uk_papers = Paper.objects(author__country='uk')
查询操作
与Django类似,MongoEngine同样也提供了一些条件语句。ne - 不相等
lt - 小于
lte - 小于等于
gt - 大于
gte - 大于等于
not - 取反
in - 值在列表中
nin - 值不在列表中
mod - 取模
all - 与列表的值相同
size - 数组的大小
exists - 字段的值存在
例如查询年龄小于等于18岁的用户:
young_users = Users.objects(age__lte=18)
对于不同类型的数据提供了不同的条件语句。
查询结果个数限制
跟传统的ORM一样,MongoEngine也可以限制查询结果的个数。一种方法是在QuerySet对象上调用limit和skip方法;另一种方法是使用数组的分片的语法。例如:users = User.objects[10:15] users = User.objects.skip(10).limit(5)
聚合操作
MongoEngine提供了一些数据库的聚合操作。统计结果个数即可以使用QuerySet的count方法,也可以使用Python风格的方法:
num_users = len(User.objects) num_users = User.objects.count()
其他的一些聚合操作。
求和:
yearly_expense = Employee.objects.sum('salary')
求平均数:
mean_age = User.objects.average('age')
高级查询
有时需要将多个条件进行组合,前面提到的方法就不能满足需求了。这时可以使用MongoEngine的Q类。它可以将多个查询条件进行 &(与) 和 |(或) 操作。例如下面的语句是查询所有年龄大于等于18岁的英国用户,或者所有年龄大于等于20岁的用户。
User.objects((Q(country='uk') & Q(age__gte=18)) | Q(age__gte=20))
在服务器端执行javascript代码
通过MongoEngine QuerySet对象的 exec_js 方法可以将javascript代码作为字符串发送给服务器端执行,然后返回执行的结果。例如查询该数据库都有那些集合:
User.objects.exec_js("db.getCollectionNames()")
相关文章推荐
- django 操作mongoDB Mongoengine教程(2)——文档模式
- django 操作mongoDB Mongoengine教程(1)——概述
- MongoDB 学习
- mongodb Cloud Manager (原mongodb mms) 监控代理安装设置图文教程
- 深入剖析MongoDB架构
- java操作MongoDB
- 【Monkey Run】MongoDB环境搭建
- MongoDB一次性能问题处理
- mongodb命令使用
- MongoDB的主从部署
- mongodb增删改查操作汇总
- mongodb数组与内嵌文档查询
- mongodb数据文件格式(一)
- 使用node+mongodb搭建简单个人博客——第一章遇到的问题
- MongoDB-Replica Set Read and Write
- Mongodb总结6-数据库启动、停止、备份等命令
- Mongodb总结6-数据库启动、停止、备份等命令
- MongoDB-Replica Set Deployment Architecture
- Mongodb总结5-通过装饰模式,用Mongodb解决Hbase的不稳定问题
- Mongodb总结5-通过装饰模式,用Mongodb解决Hbase的不稳定问题