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的文章。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM