MongoEngine模块

  今儿,接到老的的要求,要把新功能的数据存放在Mongo里。虽然一直都有听过Mango的鼎鼎大名,但是那也只是见过没用过,跟个小白没啥区别。在加上功能急需,没办法只能赶鸭子上架先上再说。下面这篇就是我赶紧上手Mongo的心得体会。只是最简单的用法。。。。

  说下MongoEngine,这个是在pymongo的基础上封装的类似于ORM一样的模块,让我们能快速的上手操作Mango。里面的操作和ORM基本类似,只是些许的区别需要注意。废话不多说了,是时候表演真正的技术了。

  在setting里配置数据库

  在model里建立模型类,模型类建立以后不用makemigrations和migrate同步,直接就可以使用。

# -*- coding: utf-8 -*-
import mongoengine
class OrderWarningInfo(mongoengine.Document):

    order_id = mongoengine.StringField(max_length=32, blank=True, null=True)
    mac = mongoengine.StringField(max_length=32, blank=True, null=True)
    number = mongoengine.StringField(max_length=32, blank=True, null=True)
    temperature = mongoengine.StringField(max_length=32, blank=True, null=True)
    scan_location = mongoengine.StringField(max_length=32, blank=True, null=True)
    event = mongoengine.StringField(blank=True)
    scan_time = mongoengine.DateTimeField(null=True, blank=True)
    status = mongoengine.StringField(blank=True, null=True )
    is_finish =  mongoengine.StringField(blank=True)

  在view里想用ORM那样的使用就可以了。

warninginfos = OrderWarningInfo.objects.all().order_by("-scan_time")
warninginfos = OrderWarningInfo.objects.filter(name=name,event=event).order_by("-scan_time")
OrderWarningInfo.objects.filter(name=name,event=event).first()
OrderWarningInfo.objects.filter(name
=name,event=event).distinct("name")

  写在最后的一些区别。

    1. MongoEngine里没用指定多个返回字段这一说(也就是说.values()这个方法不能用)。

    2. 对于去重的使用也少许不同。ORM里.distinct(). MongoEngine里.distint("字段名")表示只显示这一个字段并去重,返回一个list。

    3.用_id来查询数据。因为自动生成的_id是个ObjectId对象,所以如果你传过来的不是ObjectId,那么久不能直接查询。

      正确的姿势如下

 

#pymongo的版本号大于2.2,使用下面的语句导入ObjectId
from bson.objectid import ObjectId  ##
#pymongo的版本号小于2.2,使用下面的语句导入ObjectId
from pymongo.objectid import ObjectId 

event_id = "5c0a33b0c3cdb283d2c56817"

#__raw__允许MongoEngine使用原生mongo语句查询
warninginfos = OrderWarningInfo.objects.filter(__raw__={'_id': ObjectId("%s" % event_id)}).update(is_finish = "2")

工作中用到的不多,占时只能写出来一些最简单最基础的东西。MongoDB是门大学问,以后有机会还会继续整理关于Mango的文章。

  

原文地址:https://www.cnblogs.com/ppzhang/p/10071667.html