首頁 > 資料庫 > mysql教程 > mongoengine教程(3)数据查询

mongoengine教程(3)数据查询

WBOY
發布: 2016-06-07 16:34:08
原創
2488 人瀏覽過

与Django一样,Document类都有一个 objects 属性。它用于将类与数据库关联起来。objects属性是一个QuerySetManager类型的对象,它的操作会返回一个QuerySet类型的对象。可以通过对QuerySet对象的迭代获取数据库中的数据。 class User(Document): name = Stri

与Django一样,Document类都有一个 objects 属性。它用于将类与数据库关联起来。objects属性是一个QuerySetManager类型的对象,它的操作会返回一个QuerySet类型的对象。可以通过对QuerySet对象的迭代获取数据库中的数据。

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()")
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板