最近在写Django项目,使用的是mongodb,虽然Django不支持NoSQL,但是mongoengine可以帮助我们像ORM一样在Django项目中去操作mongodb

推荐一个可视化工具  Robo 3T

这里贴几个我觉得比较有帮助的帖子,特别是在一对一,一对多的引用

先放mongoengine的官方文档

http://docs.mongoengine.org/tutorial.html

这是翻译的中文文档,版本比较老,对应官方文档看
https://www.cnblogs.com/fillim/p/4864523.html

https://blog.csdn.net/qq_38890497/article/details/80392846

https://www.linuxzen.com/mongoengineshi-yong-bi-ji.html

1. 首先修改settings.py, 原来DATABASES完全不用去管它了, 全部设为空串就好, 然后在文件里加上下面的内容

如有必要可在INSTALLED_APPS中注册一下

#settings.py

from mongoengine import connect
connect('DB_NAME')

#####ReferenceField 引用字段

class Org(Document):
owner = ReferenceField('User') class User(Document):
org = ReferenceField('Org', reverse_delete_rule=CASCADE) User.register_delete_rule(Org, 'owner', DENY)

2.创建集合

# model.py

from mongoengine import *
from datetime import datetime,timedeltaclass User(Document):
name = StringField(max_length=32)
   age = IntField()
password = StringField(max_length=32

引用查询

from mongoengine import *
from datetime import datetime,timedelta
from ReferencenField import *
import json
from bson import json_util connect('mongotest') # 一对一引用查询
author = User.objects.filter(name="John Smith")[0]
author2 = Page.objects.filter(content="test3 Page").first().author content = Page.objects.filter(author=a)
content_ = Page.objects(author__in=[a]) print(author.name)
print(author2.name) print(content_) for i in content:
print(i.author.name,':',i.content) # 一对多引用查询
John_Smith = User.objects.filter(name="John Smith")[0]
llz = User.objects.filter(name='lilinze')[0]
# print(llz.name) print('查询作者是llz的Page')
pages = Page.objects.filter(author=llz)
for i in pages :
print(i.content) print('查询作者是John_Smith的Page')
pages = Page.objects.filter(author=John_Smith)
for i in pages:
print(i.content)

嵌入

from mongoengine import *
from datetime import datetime,timedelta
from bson.objectid import ObjectId connect('mongotest') class User(Document):
name = StringField()
pages= StringField()
time = DateTimeField() class Tags(EmbeddedDocument):
name = StringField()
date = DateTimeField(default=datetime.now()) class Page(Document):
content = StringField()
quadrant =StringField()
#两种嵌入写法
# tags = ListField(EmbeddedDocumentField('Tags'))
tags = EmbeddedDocumentListField('Tags')
author = ReferenceField(User,reverse_delete_rule = CASCADE) user = User.objects.get(name='llz')
tag = Tags(name='123')
tag1 = Tags(name='456')
page = Page(content='嵌入1',quadrant='北面',tags=[tag,tag1],author=user)
page.save()

Objectid转为字符串

John = User.objects.filter(name="John Smith")[0].id
print(John)
dict = {'John':John}
print('dict:',dict)
# j_son = json.dumps(dict) print('--------ObjectId转为Json----------')
data = json_util.dumps(John)
print('data:',data)
print('type:',type(data)) print('--------Json--to--dict----------')
print('********************************')
dd = json.loads(data)
print(dd)
print(type(dd))
print(dd['$oid'])
print(type(dd['$oid']))
dd_ = {'$oid':dd['$oid']}
jdd_ = json.dumps(dd_)
objecdd_ = json_util.loads(jdd_)
print(objecdd_)
print(type(objecdd_))
print('********************************') print('--------Json--to--ObjectId----------')
ObjectId = json_util.loads(data)
print(ObjectId)
print(type(ObjectId))

字符串转objectID

from bson.objectid import ObjectId

a = '5bfe034c07aae823b440fdcf'

# 判断是否符合object格式

if ObjectId.is_valid(a):

    A = ObjectId(a)     

    print(A)
# <class 'bson.objectid.ObjectId'>,id是bson print(isinstance(A,ObjectId)) # True

create() ,存入一个新对象,并返回

llzid = User.objects.create(name='zzz')
print(llzid.name) >>>zzz

Django用mongoengine操作mongodb的更多相关文章

  1. Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD

    一. 在python脚本中, 我们通常可以使用pymongo模块实现与mongodb数据库的交互, 但是在使用Django框架进行定制开发的web server 项目中, 仍然使用pymongo模块的 ...

  2. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  3. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  4. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  5. Django之Model操作

    Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field) - int自增列,必须填入参数 primary_ke ...

  6. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  7. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  8. PHP操作Mongodb之增删改查篇

    之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加 ...

  9. PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...

随机推荐

  1. HTTP攻击与防范-PHP安全配置

    实验目的 1.了解PHP攻击带来的危险性. 2.掌握PHP攻击的原理与方法 3.掌握防范攻击的方法 实验原理 由于网站服务器是以单一系统使用者的模式在运行,因此这个系统的使用者账号必须能够读取每个使用 ...

  2. JavaWeb-网络编程

    Java网络编程 推荐阅读: 计算机网络:https://www.cnblogs.com/zwtblog/tag/计算机网络/ 计算机网络基础 利用通信线路和通信设备,将地理位置不同的.功能独立的多台 ...

  3. C#正则表达式(通俗易懂)

    正则表达式有多重要,话不多说,直接入正题把. 首先我们来说说元字符. 1. . 点号代表除了换行意外的任意单个字符 例如 a.b  说明a和b之间只能有任意一个字符. 2.[]代表从这里面取出任意一个 ...

  4. linux 提权防护

    linux 用户提权 利用系统漏洞或者程序等方面的缺陷使一个低权限用户,获得他们原本不具有的权限或者得到root权限 下面介绍几种可能得到root访问权限的方式 1, 内核开发 防护:及时更新补丁 臭 ...

  5. java数组复习和内存分配

    Java基础知识复习 1.循环 1.1. for循环 for(int i =1;i<=10;i++){ System.out.println("Hello world"+i) ...

  6. JAVA 猜拳游戏

    JAVA 猜拳游戏 题目:通过控制台方式实现一个人机对战的猜拳游戏 用户通过输入(0.石头子 1.剪刀 2.布),机器随机生成(0.石头子 1.剪刀 2.布) 要求: 能打印玩家的对局信息,胜利的次数 ...

  7. Jmeter--由PV估算tps和最大并发数

    需求 "假设一个系统的业务有登录.浏览帖子.发送新贴.回复帖子,访问高峰是上午10点,日访问高峰PV约5208(含登录1300.浏览2706.发帖526.回帖676).系统响应时间要求小于3 ...

  8. Vue基础知识的巩固与学习

    生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期.通俗说就是 Vue 实 ...

  9. nginx 配置 https,及加载配置文件夹

    首先需要去申请一个域名签名证书,在腾讯云,阿里云都有免费版,然后下载下来按如下配置,请根据自己路径更改 server { listen 80; server_name xxx.xxx.cn; root ...

  10. CentOS 8 关闭 Firewalld 及 SELinux

    检查 SELinux 是否开启 执行 sestatus 指令可以检视目前 SELinux 的状态, 其中一项是是否有开启, 执行以下指令: # sestatus | grep status 如果看到 ...