Mongodb学习(3)基本操作——增删改查

环境 Linux环境

Mongodb3.4.4


首先按照之前的方法启动 MongoDB

./mongod -dbpath /data/db

创建数据库

语法

MongoDB 创建数据库的语法格式如下所示:

use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。

比如:

> use mytestdb
switched to db mytestdb
> db
mytestdb


查看当前的数据库可以像下面这样使用 ‘show dbs’ 的命令

> show dbs
admin   0.000GB
local   0.000GB
test    0.000GB
然后是不是就很奇怪, 刚刚创建了 “mytestdb” 怎么没找到?

那是因为里面没有任何数据,虽然创建成功了,但是暂时并不会显示

需要按照下面的方式,插入一条数据之后才能显示

> db.person.insert({"name":"Jimy"})
WriteResult({ "nInserted" : 1 })
> show dbs
test     0.000GB
admin     0.000GB
local     0.000GB
mytestdb  0.000GB
插入语句使用的时候,注意大括号和小括号,不要遗漏了

PS:MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

插入文档数据

文档的数据结构和JSON基本一样。

所有存储在集合中的数据都是BSON格式。

BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

db是数据库句柄

COLLECTION_NAME是要类似sheet页名字,即集合名

document就是插入的数据

实例如下:

> db.person.insert({"name":"Jimy","age":18,"hobby":"play balls"})
WriteResult({ "nInserted" : 1 })
以上实例中 person 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
按照下面的命令可以查看插入的数据:

> db.person.find()
{ "_id" : ObjectId("5912d3639bb9d1ee6fc1ce8f"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d48a9bb9d1ee6fc1ce90"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }
这种find()语法可以查看当前所有已经插入的数据

同时,可以定义变量,然后使用变量插入

> data_insert={"name":"alice","age":19,"hobby":"listen music"}
定义之后会回显一下:

{ "name" : "alice", "age" : 19, "hobby" : "listen music" }

将其插入,并查看

> db.person.insert(data_insert)
WriteResult({ "nInserted" : 1 })
> db.person.find()
{ "_id" : ObjectId("5912d3639bb9d1ee6fc1ce8f"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d48a9bb9d1ee6fc1ce90"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }
{ "_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
插入文档你也可以使用 db.col.save(document) 命令。

如果不指定 _id 字段 save() 方法类似于 insert() 方法。

如果指定 _id 字段,则会更新该 _id 的数据。

更新文档数据

MongoDB 使用  update()  和  save()  方法来更新集合中的文档。
update() 方法用于更新已存在的文档。语法格式如下:
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,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。


再次插入一条数据

> db.person.insert({"name":"Bob","age":22,"sex":"male"})
WriteResult({ "nInserted" : 1 })

通过 update() 方法来更新名字(name)

> db.person.update({"name":"Bob"},{$set:{"name":"Jack_chen"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find()
{ "_id" : ObjectId("5912d3639bb9d1ee6fc1ce8f"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d48a9bb9d1ee6fc1ce90"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }
{ "_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e0f69bb9d1ee6fc1ce93"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"), "name" : "Jack_chen", "age" : 22, "sex" : "male" }
使用update()方法,注意大括号的个数


save() 方法

通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

通过save 命令改变 “Bob” 的年龄(age):
> db.person.save({ "_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"), "name" : "Jack_chen", "age" : 28, "sex" : "male" })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find()
{ "_id" : ObjectId("5912d3639bb9d1ee6fc1ce8f"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d48a9bb9d1ee6fc1ce90"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }
{ "_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e0f69bb9d1ee6fc1ce93"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"), "name" : "Jack_chen", "age" : 28, "sex" : "male" }


其他的用法
只更新第一条记录:
db.person.update( { "age" : { $gt : 20 } } , { $set : { "status" : "married"} } );
全部更新:
db.person.update( { "age" : { $gt : 20 } } , { $set : { "status" : "married"} },false,true );
只添加第一条:
db.person.update( { "age" : { $gt : 21 } } , { $set : { "status" : "married"} },true,false );
全部添加加进去:
db.person.update( { "age" : { $gt : 19 } } , { $set : { "status" : "married"} },true,true );
全部更新:
db.person.update( { "age" : { $gt : 15 } } , { $inc : { "status" : married} },false,true );
只更新第一条记录:
db.person.update( { "age" : { $gt : 10 } } , { $inc : { "status" : married} },false,false );
ps:  (>) 大于 - $gt

查询文档数据

其实前文已经提到了查询方法
查询语法如下:
db.collection.find(query, projection)
  • uery :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.collection.find().pretty()
如下所示:
> db.person.find().pretty()
{ "_id" : ObjectId("5912d3639bb9d1ee6fc1ce8f"), "name" : "Jimy" }
{ "_id" : ObjectId("5912d48a9bb9d1ee6fc1ce90"), "name" : "Jimy" }
{
	"_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"),
	"name" : "Jimy",
	"age" : 18,
	"hobby" : "play balls"
}
{
	"_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"),
	"name" : "alice",
	"age" : 19,
	"hobby" : "listen music"
}
{
	"_id" : ObjectId("5912e0f69bb9d1ee6fc1ce93"),
	"name" : "alice",
	"age" : 19,
	"hobby" : "listen music"
}
{
	"_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"),
	"name" : "Jack_chen",
	"age" : 28,
	"sex" : "male"
}


通过内容来查找:

> db.person.find({"name":"alice"})
{ "_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e0f69bb9d1ee6fc1ce93"), "name" : "alice", "age" : 19, "hobby" : "listen music" }

通过组合选项查找:

> db.person.find({ $or:[  {"age":18},  {"sex":"male"}]   })
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }
{ "_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"), "name" : "Jack_chen", "age" : 28, "sex" : "male" }

使用AND 和 OR  查找

>db.person.find({"age":{$gte:18} , $or: [{"name": "Jimy"},{"hobby":"play balls"}]  })
{ "_id" : ObjectId("5912d4be9bb9d1ee6fc1ce91"), "name" : "Jimy", "age" : 18, "hobby" : "play balls" }


如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50


使用 show tables  查看当前有几个表

> db.school.insert({"name":"No1 middle"})
WriteResult({ "nInserted" : 1 })
> show tables
person
school




查看数据库

使用 db 命令查看当前工作的 数据库

使用shows dbs  查看所有数据库的名字

> db
mytestdb
> show dbs
admin     0.000GB
local     0.000GB
mytestdb  0.000GB
test      0.000GB


删除文档数据

MongoDB remove()函数是用来移除集合中的数据。

MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。


基本语法如下:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。
移除名字是 ”Jimy“ 的内容

> db.person.remove({"name":"Jimy"})
WriteResult({ "nRemoved" : 3 })

因为 justOne 参数默认为false ,因此有几条,就删除几条

如果只想删除找到的第一条, 需要将justOne 设置为 1 或者true

> db.person.find()
{ "_id" : ObjectId("5912d5e49bb9d1ee6fc1ce92"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e0f69bb9d1ee6fc1ce93"), "name" : "alice", "age" : 19, "hobby" : "listen music" }
{ "_id" : ObjectId("5912e17a9bb9d1ee6fc1ce94"), "name" : "Jack_chen", "age" : 28, "sex" : "male" }
> db.person.remove({"name":"alice"},1)
WriteResult({ "nRemoved" : 1 })


如果删除整个数据:

> db.person.remove({})
WriteResult({ "nRemoved" : 2 })
> db.person.find()


删除数据库

MongoDB 删除数据库的语法格式如下:

db.dropDatabase()
先创建一个再删除,如下:

> use ruboob
switched to db ruboob
> db.dropDatabase()
{ "dropped" : "ruboob", "ok" : 1 }

使用drop命令删除集合,即删除tables
删除集合的方式如下:

> use mytestdb
switched to db mytestdb
> db
mytestdb
> show tables
person
school
> db.person.drop()
true
> show tables
school










posted @ 2017-05-10 17:10  枫奇丶宛南  阅读(28)  评论(0编辑  收藏  举报