好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MongoDB 的高级查询

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"}}}])

三、数据模拟

 db.order.insert({"order_id":"1","uid":10,"trade_no":"111","all_price":100,"all_num":2})
db.order.insert({"order_id":"2","uid":7,"trade_no":"222","all_price":90,"all_num":2})
db.order.insert({"order_id":"3","uid":9,"trade_no":"333","all_price":20,"all_num":6})
db.order_item.insert({"order_id":"1","title":"商品鼠标 1","price":50,num:1})
db.order_item.insert({"order_id":"1","title":"商品键盘 2","price":50,num:1})
db.order_item.insert({"order_id":"1","title":"商品键盘 3","price":0,num:1})
db.order_item.insert({"order_id":"2","title":"牛奶","price":50,num:1})
db.order_item.insert({"order_id":"2","title":"酸奶","price":40,num:1})
db.order_item.insert({"order_id":"3","title":"矿泉水","price":2,num:5})
db.order_item.insert({"order_id":"3","title":"毛巾","price":10,num:1})
 

管道操作符

三、 $project

要求查找 order 只返回文档中 trade_no 和 all_price 字段

 db.order.aggregate([
	{
		$project:{ trade_no:1, all_price:1 }
	}
]);
 
四、 $match

用于过滤文档。 用法类似于 find() 方法中的参数

 db.order.aggregate([
	{
		$project:{ trade_no:1, all_price:1 }
	},
	{
		$match:{"all_price":{$gte:90}}
	}
]);
 
五、 $group

将集合中的文档进行分组, 可用于统计结果。

统计每个订单的订单数量, 按照订单号分组

 db.order_item.aggregate([
	{
		$group: {_id: "$order_id", total: {$sum: "$num"}}
	}
]);
 
六、 $sort

将集合中的文档进行排序。

 db.order.aggregate([
	{
		$project:{ trade_no:1, all_price:1 }
	},
	{
		$match:{"all_price":{$gte:90}}
	},
	{
		$sort:{"all_price":-1}
	}
]);
 
七、 $limit
 db.order.aggregate([
	{
		$project:{ trade_no:1, all_price:1 }
	},
	{
		$match:{"all_price":{$gte:90}}
	},
	{
		$sort:{"all_price":-1}
	},
	{
		$limit:1
	}
]);
 
八、 $skip
 db.order.aggregate([
	{
		$project:{ trade_no:1, all_price:1 }
	},
	{
		$match:{"all_price":{$gte:90}}
	},
	{
		$sort:{"all_price":-1}
	},
	{
		$skip:1
	}
]);
 
九、 $lookup 表关联
 db.order.aggregate([
	{
		$lookup:
		{
            from: "order_item",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
   		}
	},
	{
		$project:{ trade_no:1, all_price:1,items:1 }
	}
]);  
 

MongoDB 的高级查询

标签:god   ati   HERE   组成   用途   查询   rip   tab   资源   

查看更多关于MongoDB 的高级查询的详细内容...

  阅读:26次