一、插入文档
插入是向MongoDB中添加数据的基本方法,对目标集使用insert方法,插入一个文档:
1 2 3 4 5 |
> db.colltest.insert({'title':'Mongodb教程', 'url':'www.ywnds.com', 'tags':['mongodb','nosql','database'], 'likes':100} ) |
这个操作会给文档增加一个“_id”键,然后将其保存到MongoDB中去了。我们也可以将数据定义为一个变量,如下所示
1 2 |
> document=({title:mongodb教程}) > db.colltest.insert(document) |
批量插入文档
1 |
> for(i=1;i<=100;i++) db.test.insert({Name:"User"+i,Age:i}) |
二、删除文档
1 |
> db.colltest.remove({}) |
上述命令会删除collteset集合中所有的文档,但不会删除集合本身,原有的索引也不会删除。非常类似于SQL中的truncate命令。
remove函数可以接受一个查询文档作为可选参数,给定这个参数以后,只有符合条件的文档才会被删除。例如,假设要删除title等于Mongodb教程的文档。
1 |
> db.colltest.remove({'title':'Mongodb教程'}) |
删除数据是永久性的,不能撤销,也不能恢复。
三、更新文档
文档存入数据库以后,就可以使用update方法来修改它。Update有两个参数,一个是查询文档,用来找出要更新的文档,另一个是修改器文档,描述对找到的文档做哪些更改。
更新操作时原子的:若是两个更新同时发生,先到达服务器的先执行,接着执行另外一个。所以,互相有冲突的更新可以火速传递,并不会相互干扰。
Update()语法
1 2 3 4 5 6 |
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 :可选,抛出异常的级别。
我们先插入一个文档
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> db.colltest.insert({'title':'Mongodb教程', 'url':'www.ywnds.com', 'tags':['mongodb','nosql','database'], 'likes':100}) > db.colltest.find() { "_id" : ObjectId("569c1a439c09c9857f00a205"), "title" : "Mongodb教程", "url" : "www.ywnds.com", "tags" : [ "mongodb", "nosql", "database" ], "likes" : 100 } "$set"更新这个文档的title键的值 > db.colltest.update({'title':'Mongodb教程'},{$set:{'title':'Mongodb'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.colltest.find() { "_id" : ObjectId("569c1a439c09c9857f00a205"), "title" : "Mongodb", "url" : "www.ywnds.com", "tags" : [ "mongodb", "nosql", "database" ], "likes" : 100 } |
以上语句默认只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi参数为true。
1 2 3 4 5 6 7 |
> db.colltest.update({'title':'Mongodb教程'},{$set:{'title':'Mongodb'}},{multi:true}) "$rename"更改这个文档的likes字段名。 > db.colltest.update({likes:100},{$rename:{'likes':'like'}}) "$unset"删除这个文档的title字段。 > db.colltest.update({'title':'Mongodb教程'},{$unset:{'title':''}}) |
四、查询文档
MongoDB中使用find来进行查询,查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合。Find的第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节。
1 2 3 4 5 |
> db.colltest.find() { "_id" : ObjectId("569c23309c09c9857f00a20b"), "name" : "eric", "age" : 21, "class" : 3 } { "_id" : ObjectId("569c233a9c09c9857f00a20c"), "name" : "andy", "age" : 21, "class" : 2 } { "_id" : ObjectId("569c234a9c09c9857f00a20d"), "name" : "jerry", "age" : 24, "class" : 3 } { "_id" : ObjectId("569c23599c09c9857f00a20e"), "name" : "jerry", "age" : 22, "class" : 2 } |
find() 默认一次最多显示20行,输入 it 可以继续显示。
find() 方法以非结构化的方式来显示所有文档,如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> db.colltest.find().pretty() { "_id" : ObjectId("569c23309c09c9857f00a20b"), "name" : "eric", "age" : 21, "class" : 3 } > db.colltest.findOne() { "_id" : ObjectId("569c23309c09c9857f00a20b"), "name" : "eric", "age" : 21, "class" : 3 } |
其中 _id 是 mongodb 默认添加的唯一标识。
sort 方法可以进行排序操作,limit 方法可以限制返回行数。
1 |
db.colltest.find().sort({'age': -1}).limit(1) |
待续。。。