MongoDB基本操作

3,041 阅读4分钟

教程:

MongoDB官方手册(英文)

https://docs.mongodb.com/manual/

MongoDB中文网 

http://www.mongodb.org.cn/

菜鸟教程

http://www.runoob.com/mongodb/mongodb-tutorial.html

(我的MongoDB安装在linux操作系统中,可以用 Xshell,这样就可以在Windows系统远程控制linux ~)


安装:

菜鸟教程 http://www.runoob.com/mongodb/mongodb-tutorial.html


启动、运行与退出:

安装后第一次启动MongoDB: (只要不关闭数据库,只有第一次需要这一步操作)

~$ sudo mongod &

之后运行 mongo (每次连接MongoDB都需要这一步,如果不成功,可尝试在 /usr/bin目录下运行)

~$ mongo

退出mongoDB: exit  (仅为退出与数据库的连接,并非关闭数据库,一般情况不需要关闭数据库)

> exitbye


创建、查看数据库:

创建数据库(zytest为自定义的数据库名,创建数据库后不插入数据则无法查看到数据库)

> use zytestswitched to db zytest

创建集合(mycoll为自定义的集合名,只有插入数据才能创建集合)

> db.mycoll.insert({"name":"zy","age":22,"city":"sh"})WriteResult({ "nInserted" : 1 })

查看所有数据库

> show dbs

进入已存在的zytest数据库(与创建数据库相同)

> use zytestswitched to db zytest

查看此数据库中所有集合

> show collectionsmycoll

重命名集合

db.旧集合名.renameCollection(“新集合名”)

处理数据库中的文档常用的语句为db. 集合名 . 功能名(内容)


插入文档(insertsave ):

Insert

db.集合名.insert(document)

>  db.mycoll.insert({"name":"Jack","city":"sh"})WriteResult({ "nInserted" : 1 })

3.2版本以后可用insertOneinsertMany

> db.mycoll.insertOne({"name":"david"}){"acknowledged" : true,"insertedId" : ObjectId("59ae363f6e338be87bddc526")}

insertMany后面的括号中要用中括号[ ]将两个document 括起来

> db.mycoll.insertMany([{"name":"Joe"},{"name":"Ann"}])

{

"acknowledged" : true,

"insertedIds" : [

ObjectId("59ae38636e338be87bddc527"),

ObjectId("59ae38636e338be87bddc528")

]

}

 

save:

save如果不指定_id 字段,则与insert 用法相同,如果指定_id 字段,则更新对应文档内容

> db.mycoll.save({"name":"Andy"})WriteResult({ "nInserted" : 1 })


更新文档(update、save):

update:

query : update的查询条件(可用 条件操作符)。

update : update的对象和一些更新操作符 (如$,$inc...

upsert : 可选,这个参数的意思是,如果不存在update 的记录,是否插入 true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。(不常用)

Collation:可选,用于指定排序规则。(不常用)

例:

db.mycoll.update({"name":"zy"},{$set:{"age":"23"}},{ upsert:true,multi:true})

db.mycoll.update({"name":"zy"},{$set:{"age":"23"}}, true,true)

以上两条语句同义。

另外还有updateOneupdateMany replaceOne可以用。

save:

输入一个文档,文档中有一个key_id save会检测集合中是否有同样_id的文档,有则更新该文档,无则插入一个新文档。


查询文档(find):

db.集合名.find(query , projection)

查询集合mycoll中全部文档的全部内容

> db.mycoll.find( )

查询集合mycoll中全部文档的部分键值

name=1   1表示显示,0 表示不显示,10不可同时有

> db.mycoll.find({ },{name:1,age:1}){ "_id" : ObjectId("59ae1834f1805798274a159b"), "name" : "zy", "age" : "22" }{ "_id" : ObjectId("59ae363f6e338be87bddc526"), "name" : "david" }{ "_id" : ObjectId("59ae38636e338be87bddc527"), "name" : "Joe" }{ "_id" : ObjectId("59ae38636e338be87bddc528"), "name" : "Ann" }{ "_id" : ObjectId("59ae39516e338be87bddc529"), "name" : "Jack" }{ "_id" : ObjectId("59ae3c4c6e338be87bddc52a"), "name" : "Andy" }{ "_id" : 10, "name" : "Lisa" }

查询集合mycoll中符合条件的文档

> db.mycoll.find({ "name" : "zy"})

query部分可用各种条件操作符进行筛选,两个条件用逗号分隔表示and

or的用法:

db.mycoll.find(

     $or:[

           {key1:value1},{key2:value2}

]

)

基本的条件操作符:

操作符

含义

$gt

>

$gte

>=

$lt

<

$lte

<=

$ne

不等于

$eg

等于

$type

检索数据类型(每个类型对应一个数字)

条件操作符用法示例:

db.mycoll.find({“age”:{$lt:30}})

 

还可以在find之后加限定来限定输出显示:

限定读取的记录条数

db.mycoll.find( ).limit(10)

跳过指定条数

db.mycoll.find( ).skip(10)

结合使用以上两个语句可实现分页~

 

按指定key排序显示(1为升序,-1 为降序)

db.mycoll.find( ).sort({age:1})

 

使每个key分行显示

db.mycoll.find( ).pretty( )

 

查询总数

db.mycoll.find( ).count( )


删除操作:

删除数据库:(首先要通过use 数据库名”进入想要删除的数据库)

db.dropDatabase()

删除名为mycoll的集合:

db.mycoll.drop()

删除指定文档:

 

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 1,则只删除一个文档。

writeConcern :(可选)抛出异常的级别。

 

删除集合mycoll中所有文档:

db.mycoll.remove({ })