在monogo shell的命令使用
连接数据库
本地数据库链接,默认的路径是/data/db/
,可以使用--dbpath
来指定数据库路径
1
| $ sudo mongod --path ~/Desktop/db/
|
创建数据库
语法:use DATABASE_NAME
也有切换数据库操作的意思
1 2 3 4
| > use runoob switched to db runoob > db runoob
|
查看全部数据库
1 2 3 4
| > show dbs dmin 0.000GB local 0.000GB runoob 0.000GB
|
删除数据库
语法:db.dropDatabase()
1 2
| > db.dropDatabase() { "dropped" : "runoob", "ok" : 1 }
|
创建集合
语法: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 2 3 4 5 6 7 8
| > use runoob switched to db runoob > show tables site > db.site.drop() true > show tables >
|
插入文档
Mongodb文档的数据结构和json基本一样,所有的数据都是BSON(存储在集合中的)
语法:db.COLLECTION_NAME.insert(document)
更新文档
有update()
和save()
方法来更新集合中的文档
语法格式如下:
1 2 3 4 5 6 7 8 9 10
| > db.collection.update( <query>, <update>, { upsert:<boolean>, multi:<boolean>, writeConcern:<document> }
)
|
参数说明:
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 2 3 4 5 6
| db.collection.save( <document>, { writeConcern:<document> } )
|
比如我们替换了_id为599ea3130a0004f919342ea5的文档数据
1
| > db.runoob.save({"_id":ObjectId("599ea3130a0004f919342ea5"), "name":"kinoko3"})
|
MongoEngine使用
定义一个文档
1 2 3 4 5 6 7 8 9 10
| from mongoengine import *
import datetime
class Page(Document):
title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.datetime.now)
|
保存到数据库
1 2 3 4 5 6 7 8
| if __name__ == '__main__': page = Page() page.title = "Hatsune Miku" page.save() page_1 = Page(title="Hatsune Miku") page_1.save()
|
保存之后mongoenine将会创建一个新的以class
名命名的集合,比如class Page(Document)
的一个类,创建的集合将会是page
,查看创建的集合可以在mongodb shell
里使用命令show tables
或者show collections
查看
动态文档(DynamicDocument)
动态文档可以在保存数据的时候给数据自定不同的字段
比如:
1 2 3 4 5 6 7
| class Page(DynamicDocument): title = StringField(max_length=200)
if __name__ == '__main__': page = Page(title='Hatsune Miku') page.tags = ['mongodb', 'mongoengine'] page.save()
|
page.tags
就是重新在这个文档里插入一个新的字段数据,在保存的时候,这个字段是之前没有在文档类里声明的,如果你不继承动态文档,直接在保存的时候添加字段,运行的时候不会报错,但是新加入的字段不会保存.上面的文档在mongodb shell
中显示:
1 2 3 4 5 6 7 8 9
| > { "_id" : ObjectId("59a2b15c6f1d6513f3401668"), "name" : "Hatsune Miku", "tags" : [ "mongodb", "mongoengine" ] } >
|
tags
字段是我们后来添加的。