最近在写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

最新文章

  1. Android 取源码时 error: could not verify the tag &#39;v1.12.4&#39;的解决
  2. SQL触发器实例讲解
  3. 第7章 jQuery插件的使用和写法
  4. &lt;转&gt;Hibernate的优、缺点(局限性)
  5. Linux任务调度命令(轻松管理Linux)
  6. Week1 Java 基础知识
  7. How to use Ubuntu Linux in virtual box
  8. yii2 批量插入or更新
  9. 【转】MYSQL入门学习之十一:触发器的基本操作
  10. React 学习资源分享 菜鸟刚学5天 博客写的不多 不懂写博客的套路
  11. javascript封装id|class|元素选择器
  12. Tomcat部署发布JSP应用程序的三种方法 (转)
  13. 【java设计模式】之 建造者(Builder)模式
  14. 【Django】学习资料
  15. mysql 和 sqlserver中备份一张表的区别
  16. EF - Database First 开发方式
  17. python 自动补全
  18. sql server复制表数据到另外一个表 的存储过程
  19. 8 Productivity hacks for Data Scientists &amp; Business Analysts
  20. spark sql中保存数据的几种方式

热门文章

  1. 基于C#打造的OPCUA客户端应用
  2. 音视频开发者的福音,快速集成AI配音能力
  3. 智能脚本工具(Smart scripts)测试应用
  4. 可视化BI工具选型,应该注意什么
  5. 数据平滑处理-均值|中值|Savitzky-Golay滤波器
  6. C# 逆变(Contravariance)/协变(Covariance) - 个人的理解
  7. CA周记 2022年的第一课 - Rust
  8. pd.cut和pd.qcut()之间的区别
  9. JSP 表单提交 数据库乱码解决方法
  10. LGP3311题解