在monogo shell的命令使用
连接数据库
本地数据库链接,默认的路径是/data/db/
,可以使用--dbpath
来指定数据库路径
1 | sudo mongod --path ~/Desktop/db/ |
创建数据库
语法:use DATABASE_NAME
也有切换数据库操作的意思
1 | use runoob |
查看全部数据库
1 | show dbs |
删除数据库
语法:db.dropDatabase()
1 | db.dropDatabase() |
创建集合
语法:db.createCollection(name,option)
options
参数,类型是Document
,可选有字段capped
, autoIndexId
,size
,max
1 | db.createCollection("firstcollection") |
带有option参数的:
1 | db.createCollection("firstcollection",{capped:ture}) |
一般情况下不用主动创建集合,插入文档的参数中有collection_name
删除数据库中的一个集合
语法:db.collection.drop()
比如切换到runoob数据库删除里面的一个site集合
1 | use runoob |
插入文档
Mongodb文档的数据结构和json基本一样,所有的数据都是BSON(存储在集合中的)
语法:db.COLLECTION_NAME.insert(document)
更新文档
有update()
和save()
方法来更新集合中的文档
语法格式如下:
1 | db.collection.update( |
参数说明:
query
:update
的查询条件,类似sql update
查询内where
后面的。update
:update
的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update
查询内set
后面的upsert
: 可选,这个参数的意思是,如果不存在update
的记录,是否插入objNew
,true
为插入,默认是false
,不插入。multi
: 可选,mongodb 默认是false
,只更新找到的第一条记录,如果这个参数为true
,就把按条件查出来多条记录全部更新。
比如我们在runoob插入文档
1 | db.runoob.insert({title:'MongiDB',description:"Nosql"}) |
然后我们通过update()
来更新标题
1 | db.runoob.update({'title':'MongoDB'},{$set:{'title':'Mongo'}}) |
以上的语句只会更新找到的第一个文档,如果你要更新多个同样的文档,你需要把multi
参数打开
1 | db.runoob.update({'title':'MongoDB'},{$set:{'title':'Mongo'},{multi:ture}}) |
接下来我们使用save()
来更新文档,save()
方法通过传递的文档来替换已有文档。
语法格式如下:
1 | db.collection.save( |
比如我们替换了_id为599ea3130a0004f919342ea5的文档数据
1 | db.runoob.save({"_id":ObjectId("599ea3130a0004f919342ea5"), "name":"kinoko3"}) |
MongoEngine使用
定义一个文档
1 | from mongoengine import * |
保存到数据库
1 | if __name__ == '__main__': |
保存之后mongoenine将会创建一个新的以class
名命名的集合,比如class Page(Document)
的一个类,创建的集合将会是page
,查看创建的集合可以在mongodb shell
里使用命令show tables
或者show collections
查看
动态文档(DynamicDocument)
动态文档可以在保存数据的时候给数据自定不同的字段
比如:
1 | class Page(DynamicDocument): |
page.tags
就是重新在这个文档里插入一个新的字段数据,在保存的时候,这个字段是之前没有在文档类里声明的,如果你不继承动态文档,直接在保存的时候添加字段,运行的时候不会报错,但是新加入的字段不会保存.上面的文档在mongodb shell
中显示:
1 | { |
tags
字段是我们后来添加的。