MongoDB的一些常规查询以及操作

索引

创建索引
#说明:1表示升序创建索引,-1表示降序创建索引
>db.user.createIndex({'age':1}) 
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

删除索引
#删除索引 
db.user.dropIndex("age_1")
#或者,删除除了_id之外的索引 
db.user.dropIndexes()
查看执行计划
> db.user.find({age:{$gt:100},id:{$lt:200}}).explain()
{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "testdb.user",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"$and" : [
				{
					"id" : {
						"$lt" : 200
					}
				},
				{
					"age" : {
						"$gt" : 100
					}
				}
			]
		},
		"queryHash" : "5DD09CA4",
		"planCacheKey" : "0167A000",
		"winningPlan" : {
			#查询方式,常见的有COLLSCAN/全表扫描、IXSCAN/索引扫描、 FETCH/根据索引去检索文档、SHARD_MERGE/合并分片结果、IDHACK/针对_id进行查询 
			"stage" : "FETCH", 
			"filter" : {
				"id" : {
					"$lt" : 200
				}
			},
			"inputStage" : {
				"stage" : "IXSCAN",
				"keyPattern" : {
					"age" : 1
				},
				"indexName" : "age_1",
				"isMultiKey" : false,
				"multiKeyPaths" : {
					"age" : [ ]
				},
				"isUnique" : false,
				"isSparse" : false,
				"isPartial" : false,
				"indexVersion" : 2,
				"direction" : "forward",
				"indexBounds" : {
					"age" : [
						"(100.0, inf.0]"
					]
				}
			}
		},
		"rejectedPlans" : [ ]
	},
	"serverInfo" : {
		"host" : "ad8b3bc4d6e9",
		"port" : 27017,
		"version" : "4.4.1",
		"gitVersion" : "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1"
	},
	"ok" : 1
}

查询

普通查询

####查询+排序,
字符串以外的字段查询需要指定类型

db.ad_user_idea.find({appVersion:Number(5),type:Number(100012)}).sort({created:1})

聚合查询

根据某一字段分组并统计总数

_id:'$topicOid',topicOid:{$sum:1}写法为=>_id:'以哪个字段进行分组',分组数据的字段名:{$sum:1}'

db.ad_topic_like.aggregate([{$group:{_id:"$topicOid",topicOid:{$sum:1}}}])
$sum	计算总和。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg	计算平均值	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min	获取集合中所有文档对应值得最小值。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max	获取集合中所有文档对应值得最大值。	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push	将值加入一个数组中,不会判断是否有重复的值。	db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet	将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。	db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first	根据资源文档的排序获取第一个文档数据。	db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last	根据资源文档的排序获取最后一个文档数据	db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

参考连接

管道查询

顾名思义就像管道一样,aggregate里配置的是一个[]数组,代表着一个个的管道,每一个管道处理的是上一个管道传给他的数据,需要注意字段的变更

$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。

参考文档
官方文档

关联查询


db.ad_topic_like.aggregate([
{$group:{_id:'$topicOid',likeCount:{$sum:1}}},
{$sort:{'likeCount':-1}},
{$lookup:
				{
				from:'ad_user_idea',  // 需要加入的表
				localField:'_id',  // 主表的关联键字段
				foreignField:'_id', // 加入表的关联键字段
				as:'idea' // 给关联表的别名
				}
},
{$match:{'idea.appVersion':Number(5)}},// 筛选,注意这里如果表示表明要加'',保险起见以后所有的表明都加
{$skip:0},
{$limit:10}
])

模糊查询

如果开头包含空格(参数中的+将会变成空格)就匹配证明开头是明确的,因为手机号以+开头已为完整所以匹配正则^.phone****
否则就是没有输入+号码不完整匹配正则^.*phone*

 Pattern pattern=
                phone.charAt(0)==' '?
                                Pattern.compile("^." + phone + ".*$", Pattern.CASE_INSENSITIVE):
                                Pattern.compile("^.*" + phone + ".*$", Pattern.CASE_INSENSITIVE);
                query.addCriteria(Criteria.where("Phone").regex(pattern));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值