教程:
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. 集合名 . 功能名(内容)
插入文档(insert、save ):
Insert:
db.集合名.insert(document)
|
> db.mycoll.insert({"name":"Jack","city":"sh"})WriteResult({ "nInserted" : 1 }) |
3.2版本以后可用insertOne和insertMany
|
> 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)
以上两条语句同义。
另外还有updateOne、updateMany 和replaceOne可以用。
save:
输入一个文档,文档中有一个key为”_id ”,save会检测集合中是否有同样_id的文档,有则更新该文档,无则插入一个新文档。
查询文档(find):
db.集合名.find(query , projection)
查询集合mycoll中全部文档的全部内容
|
> db.mycoll.find( ) |
查询集合mycoll中全部文档的部分键值
name=1 1表示显示,0 表示不显示,1和0不可同时有
|
> 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({ }) |