淘先锋技术网

首页 1 2 3 4 5 6 7

一、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()方法的排序方式,默认按照文档的升序排列。