一、MongoDB 更新文档
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 :可选,抛出异常的级别。
例子:修改asd集合里的hobby字段数据
>db.asd.update({"hobby":["aa", "ss"]},{$set:{"hobby":['aaa','bbb']}})
>WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) --->输出信息
>db.asd.find() --->查看修改的数据
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true
>db.asd.update({"hobby":["aa", "ss"]},{$set:{"hobby":['aaa','bbb']}},{multi:true})
save()方法:通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
语法:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。
例子:修改asd集合中_id为5f632b9e958af4eccba324c8、字段为hobby数据
>db.asd.save({
"_id":ObjectId("5f632b9e958af4eccba324c8"),
"age":23,
"hobby":['qqq','www'],
"name":"项目"
}) --->注意:如果修改某个字段,除了写上要修改的字段,得把所有不需要修改的字段也给写上
--->可以理解为是这条数据覆盖了要修改的数据
>WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) --->输出信息
>db.asd.find() --->查看修改的数据
更多实例:
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
在3.2版本开始,MongoDB提供以下更新集合文档的方法:
db.collection.updateOne() 向指定集合更新单个文档
db.collection.updateMany() 向指定集合更新多个文档
二、MongoDB删除文档
MongoDB remove()函数是用来移除集合中的数据。
MongoDB数据更新可以使用update()函数。 在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
1、remove()方法
语法:
db.collection.remove(
<query>,
<justOne>
)
//2.6版本之后的语法
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
例子:
1.向asd集合中添加两条数据(下面语句运行两次,它会生成两条id不同,其他一样的数据)
>db.asd.insert({name:'xiaozi',age:23,bir:'09-09'})
2.查看新增的数据
>db,asd.find()
3.删除刚刚新增的数据
>db.asd.remove({bir:"09-09"})
>WriteResult({ "nRemoved" : 2 }) //运行的结果
>db.asd.find() //验证是成功删除
注意:db.asd.remove()是删除所有符合条件的数据,如果只想删除一条,可以使用db.asd.remove({条件},1)
三、MongoDB查询文档
语法:上面也用过了
db.集合名.find() //find()方法是以非结构化的方式来显示所有文档(排版不好看)
db.集合名.find().pretty() //pretty()方法以格式化的方式来显示所有文档(有排版)
db.集合名.findOne() //findOne()只返回一个文档(默认有排版)
注意:findOne()查询出来是以格式化的方式展示的,后面不可以再跟.pretty()
1、MongoDB 与 RDBMS Where 语句比较
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.asd.find({“bir”:“09-09”}).pretty() | where bir = ‘09-09’ |
不等于 | {<key>:{$lt:<value>}} | db.asd.find({“bir”:{$ne:‘09-09’}}).pretty() | where bir != ‘09-09’ |
类似的还有小于(lt)、小于或等于(lte)、大于(gt)、大于或等于(gte),使用方法跟 “不等于” 类似,只是将美元符($)后面、英文冒号(:)前面之间的字面改成相应的就行了
2、MongoDB AND 条件:
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件
MongoDB OR 条件:
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.asd.find( {$or: [{key1: value1}, {key2:value2}] } ).pretty()
or条件语句要写在{}下面,{}里面再写$or:[],数组[]里面就是条件,每个条件必须写在{}里面,多个条件用英文逗号隔开
知道了,and和or的格式,就可以联合使用了
3、MongoDB $type 操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果
MongoDB 中可以使用的类型如下表所示:
使用实例
如果想获取 asd 集合中 title 为 String 的数据,其他类型类似
>db.asd.find({"title" : {$type : 2}})
4、MongoDB Limit() 方法、Skip() 方法、Sort()方法
1、limit()方法 //读取指定数量的数据记录
语法:db.集合名.find().limit(number) //number为数字
2、skip()方法 //跳过指定数量的数据
语法:db.集合名.find().limit(number).skip(number) //number为数字
3、sort()方法 //对数据进行排序
语法:db.集合名.find().sort({KEY:1}) //KEY是要排序得字段
解释:1为升序排列,而-1是用于降序排列;如果没有指定sort()方法的排序方式,默认按照文档的升序排列。