mongoDB以类JSON的方式,即BSON来组织和封装数据,实现了非机构化数据的存储。那对于其数据的查询,增删改,则由所谓的CRUD方法来实现,相当于关系型数据库的DQL,DML。CRUD特性基本上与SQL数据库的操作命令有很多相似的地方,也有一些差异。本文简要描述CRUD,便于快速认识及理解mongoDB的日常操作。
预备热身
Linux下快速安装MongoDB
Windows平台下安装MongoDB
mongoDB 启动与停止
mongo shell连接到mongoDB及shell提示符下执行js脚本
mongoDB简介及关键特性
SQL与mongoDB对比及映射
一、创建数据库
//演示环境
# cat /etc/redhat-release
CentOS release 6.7 (Final)
# mongo --version
MongoDB shell version: 3.0.12
创建语法
use database_name
# mongo
MongoDB shell version: 3.0.12
connecting to: test
> use tempdb //如果数据库不存在,则创建数据库,否则切换到指定数据库
switched to db tempdb
> show dbs //由于没有插入任何文档,因此无法查看到刚刚创建的数据库
local 0.031GB
二、创建文档
db.collection_name.insert(document) //创建语法
> db.users.insert({ //该命令将添加一个文件,同时创建集合users
... author:"Leshami",
... age:26,
... groups:["dba","operator"],
... blog:"http://blog.csdn.net/leshami"
... })
WriteResult({ "nInserted" : 1 })
> show dbs; //再次查看数据库,可以看到tempdb已产生
local 0.031GB
tempdb 0.031GB
> db.users.insert({ //再次新增一个文档
... author:"David",
... age:28,
... groups:["system","dev"],
... blog:"http://blog.csdn.net/david"
... })
WriteResult({ "nInserted" : 1 })
三、查询文档
db.collection_name.find() //查看语法
db.collection_name.find().pretty() //查看语法,便于阅读的简易方式
db.collection.find( <query filter>, <projection> ) //query filter为过滤条件,projection表示显示哪些列
> db.users.find() //如查看users集合,由于输出结果太长,此处查询结果省略
> db.users.find({},{_id:0}) //使用_id:0方式过滤自动生产的_id列
{ "author" : "Leshami", "age" : 26, "groups" : [ "dba", "operator" ], "blog" : "http://blog.csdn.net/leshami" }
{ "author" : "David", "age" : 28, "groups" : [ "system", "dev" ], "blog" : "http://blog.csdn.net/david" }
//使用pretty方式查看结果集
> db.users.find().pretty()
{
"_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
"author" : "Leshami",
"age" : 26,
"groups" : [
"dba",
"operator"
],
"blog" : "http://blog.csdn.net/leshami"
}
{
"_id" : ObjectId("57ecb3f9c3f3ec8e414b944d"),
"author" : "David",
"age" : 28,
"groups" : [
"system",
"dev"
],
"blog" : "http://blog.csdn.net/david"
}
//也可以使用输出到变量的方式,然后再printjson来输出结果集
> var list=db.users.find().toArray();
> printjson(list)
[
{
"_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
"author" : "Leshami",
"age" : 26,
"groups" : [
"dba",
"operator"
],
"blog" : "http://blog.csdn.net/leshami"
},
{
"_id" : ObjectId("57ecb3f9c3f3ec8e414b944d"),
"author" : "David",
"age" : 28,
"groups" : [
"system",
"dev"
],
"blog" : "http://blog.csdn.net/david"
}
]
tempdb> db.actor.find() //使用find方式查询文档
{ "_id" : ObjectId("57a188010662f146e0bc2a07"), "id" : 1, "name" : "robin", "age" : 25 }
tempdb> db.actor.insert({id:2,name:"jerry",age:26})
WriteResult({ "nInserted" : 1 })
tempdb> db.actor.find()
{ "_id" : ObjectId("57a188010662f146e0bc2a07"), "id" : 1, "name" : "robin", "age" : 25 }
{ "_id" : ObjectId("57a188460662f146e0bc2a08"), "id" : 2, "name" : "jerry", "age" : 26 }
四、更新文档
语法
db.collection_name.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,就把按条件查出来多条记录全部更新。
writeConcern :可选,用于控制写入多少个节点后在向客户端应答,抛出异常等。
//下面将Leshami的年龄从25修改到27
> db.users.update(
... {author:"Leshami"},
... {$set:{age:27}}
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find({age:27},{_id:0}).pretty()
{
"author" : "Leshami",
"age" : 27,
"groups" : [
"dba",
"operator"
],
"blog" : "http://blog.csdn.net/leshami"
}
五、删除文档
语法
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :可选,用于控制写入多少个节点后在向客户端应答,抛出异常等。
> db.users.remove({age:28}) //删除年龄为28的文档
WriteResult({ "nRemoved" : 1 })
> db.users.find({age:28}).pretty() //查看文档无返回记录
> db.users.find().pretty()
{
"_id" : ObjectId("57ecb2d9c3f3ec8e414b944c"),
"author" : "Leshami",
"age" : 27,
"groups" : [
"dba",
"operator"
],
"blog" : "http://blog.csdn.net/leshami"
}
六、小结
1、本文简要描述了mongoDB的CRUD的常规操作,并给出了示例演示
2、CRUD基本上等同于SQL数据库的增删改查
3、每一个操作都有更详细以及更丰富的用法,具体可参考官方文档