zoukankan      html  css  js  c++  java
  • 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的文章。

      

  • 相关阅读:
    一个主机下创建两个MySQL
    Chrome: Failed to read the 'localStorage' property from 'Window' 的解决办法
    Effective C++
    归并排序
    Daily Note
    关于Beta分布、二项分布与Dirichlet分布、多项分布的关系
    测试公式
    VLAN原理解释
    子网划分
    windows下制作debian U盘启动
  • 原文地址:https://www.cnblogs.com/ppzhang/p/10071667.html
Copyright © 2011-2022 走看看