MONGODB 与sql聚合操作对应图

MongoDB 高级查询条件操作符

2012-04-25 15:35:19|  分类: MongoDB |  标签:mongodb使用  mongodb查询  |举报|字号 订阅

http://blog.163.com/wm_at163/blog/static/13217349020123253346620/

http://blog.csdn.net/yczz/article/details/5978800

下载LOFTER我的照片书  |

MongoDB 支持多种复杂的查询方式,能实现大多数 T-SQL 功能,远不是 Key-Value 之类的 NoSQL DB 所能比拟的。
Conditional Operators : $slice //切片
Conditional Operators : $lt <, $lte <=, $gt >, $gte >=
Conditional Operator : $ne //不等于
Conditional Operator : $in //属于
Conditional Operator : $nin //不属于
Conditional Operator : $mod //取模运算
Conditional Operator:   $all  //全部属于
Conditional Operator : $size //数量
Conditional Operator: $exists //字段存在
Conditional Operator: $type //字段类型
Conditional Operator: $or // 或
Regular Expressions //正则表达式
Value in an Array // 数组中的值
Conditional Operator: $elemMatch //要素符合
Value in an Embedded Object //内嵌对象中的值
Meta operator: $not //不是
Javascript Expressions and $where //
sort() //排序
limit() //限制取数据条数
skip() //跳过一定数值开始取
snapshot() //
count() // 数量
group() //分组

准备数据

In [9]: db
Out[9]: Database(Connection(‘localhost‘, 27017), u‘test‘)
In [10]: table = db.table_abeen
In [11]: table
Out[11]: Collection(Database(Connection(‘localhost‘, 27017), u‘test‘), u‘table_abeen‘)

In [12]: table.insert({"name":"abeen", "age":27})
Sun Aug 8 23:14:20 connection accepted from 127.0.0.1:46143 #27
Out[12]: ObjectId(‘4c5f9cbc421aa90fb9000000‘)

In [14]: table.insert({"name":"shanshan", "age":22})
Out[14]: ObjectId(‘4c5f9ccb421aa90fb9000001‘)

Conditional Operator: $ne (not equal)

//查找name不等于abeen的信息
In [24]: list(table.find({"name":{"$ne":"abeen"}}))
Out[24]:
[{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

Conditional Operator: $gt $lt(gt= greater than, lt=less than)

//查找name不等于abeen,并且age大于22的
In [29]: list(table.find({"name": {"$ne": "abeen"}, "age":{"$gt": 22}}))
Out[29]:
[{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

获取子集 $ne  $slice

//select "age" from table where name = "abeen"
In [42]: list(table.find({"name": "abeen"}, {"age" : 1}))
Out[42]: [{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27}]

//get all posts about mongodb without "age"
In [43]: list(table.find({"name": "abeen"}, {"age" : 0}))
Out[43]: [{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘name‘: u‘abeen‘}]

//name不等于abeen的"age"信息,取前5条
In [48]: list(table.find({"name": {"$ne":"abeen"}}, {"age":{"$slice":5}}))
//取name信息,从第10条开始取20条
In [54]: list(table.find({}, {"name": {"$slice": [10,20]}}))
//取name信息,从后20条开始取10条
In [55]: list(table.find({}, {"name": {"$slice": [-20,10]}}))

取数值范围

//age大于23的
In [56]: list(table.find({"age":{"$gt":23}}))
Out[56]: [{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘}]

//age小于23的
In [57]: list(table.find({"age":{"$lt":23}}))
Out[57]:
[{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘}]

//age大于等于23的
In [58]: list(table.find({"age":{"$gte":23}}))
Out[58]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

//age小于等于23的
In [59]: list(table.find({"age":{"$lte":23}}))
Out[59]:
[{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

Conditional Operator: $gt

//22 < age < 25的
In [63]: list(table.find({"age": {"$gt":22, "$lt":25}}))
Out[63]:
[{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

Conditional Operator : $in

//name在列表["abeen","ab","b"]里面的
In [67]: list(table.find({"name":{"$in":["abeen","ab","b"]}}))
Out[67]: [{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘}]

//name在列表["abeen","ab","b"]里面的,限制取1条数据
In [69]: list(table.find({"name":{"$in":["abeen","ab","b","shanshan"]}}).limit(1))
Out[69]: [{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘}]

Conditional Operator : $nin (not in)

//name不在列表["abeen","ab","b"]里面的
In [70]: list(table.find({"name":{"$nin":["abeen","ab","b"]}}))
Out[70]:
[{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘}]

Conditional Operator: $mod

// 查找age除10模等于1的
In [71]: list(table.find({"age":{"$mod":[10,1]}}))

Conditional Operator: $all

//取name包含所有["abeen","a","b"]的信息
In [77]: list(table.find({"name":{"$all":["abeen","a","b"]}}))
Out[77]:
[{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘),
u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]}]

Conditional Operator: $size

//取name元素数和$size数相同的信息
In [81]: list(table.find({"name":{"$size": 6}}))
Out[81]:
[{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘),
u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]}]

Conditional Operator: $exists

//取name存在的信息
In [83]: list(table.find({"name":{"$exists": True}}))
Out[83]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘),
u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]}]
//取name不存在信息
In [84]: list(table.find({"name":{"$exists": False}}))
Out[84]: []

Conditional Operator: $type

//name类型为字符串的
In [88]: list(table.find({"name":{"$type": 2}}))

type对应该类型表如下:

Conditional Operator: $or

//查找name等于abeen或等于shanshan的信息
In [95]: list(table.find({"$or" :[{"name": "abeen"}, {"name":"shanshan"}]}))
Out[95]: []

//查找age等于22,或name等于abeen或等于shanshan的信息
In [96]: list(table.find({"age":22, "$or" :[{"name": "abeen"}, {"name":"shanshan"}]}))
Out[96]: []

Regular Expressions

//利用正则查询
In [114]: list(table.find({"name": {"$regex": r".*ee.*"}}))
Out[114]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘),
u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]}]
正则表达式标记:
i: 忽略大小写。
m: 默认为单行处理,此标记表示多行。
x: 扩展。

Conditional Operator: $elemMatch

In [135]: list(table.find( { "age" : {"$elemMatch": {"name": {"$regex": r".*ee.*"},"age":{"$gt":22}}}}))

Value in an Embedded Object

//查找内部对象信息,
//查找内部对象info的name等于abeen的信息
In [217]: list(table.find({"info.name": "abeen"}))
Out[217]:
[{u‘_id‘: ObjectId(‘4c5fcd7e421aa90fb9000007‘),
u‘info‘: {u‘address‘: u‘beijing‘, u‘age‘: 28, u‘name‘: u‘abeen‘},
u‘name‘: u‘abeen_object‘}]

Meta operator: $not

//查询age不在大于23的范围内的信息
In [160]: list(table.find({"age": {"$not":{"$gt": 23}}}))
Out[160]:
[{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘),
u‘age‘: 22,
u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘),
u‘age‘: 22,
u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘),
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘),
u‘address‘: u‘da zhong si‘,
u‘age‘: 23,
u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘),
u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]}]

Javascript Expressions and $where

//age大于23的
In [164]: list(table.find({"age": {"$gt":23}}))
Out[164]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5fae95421aa90fb9000006‘), u‘age‘: 25, u‘name‘: u‘‘}]
//age大于23的
In [165]: list(table.find({"$where": "this.age > 23"}))
Out[165]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5fae95421aa90fb9000006‘), u‘age‘: 25, u‘name‘: u‘‘}]

//skip()  limit()

In [204]: result = table.find().skip(2).limit(3)

In [205]: for r in result : print r
{u‘age‘: 22, u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘), u‘name‘: u‘shanshan2‘}
{u‘age‘: 23, u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘), u‘name‘: u‘shanshan3‘}
{u‘age‘: 23, u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘), u‘name‘: u‘shanshan3‘,

u‘address‘: u‘da zhong si‘}

Mongo Query Language 类似 Sql 语句

$query - 查询类似于sql中的 where
$orderby - 排序{x:1},1为升序 -1为降序

$query - 查询类似于sql中的 where
$orderby - 排序{x:1},1为升序 -1为降序

//select * from table where name="abeen" order by age asc
In [28]: list(table.find({"$query" : {"name": "abeen"}, "$orderby": { "age": 1 }}))

//select * from table where name="abeen" order by age desc
In [29]: list(table.find({"$query" : {"name": "abeen"}, "$orderby": { "age": -1 }}))

//select name, address from table where name like ‘%a%‘
按找指定字段按条件,并可指定排序 1:返回字段,0不返回字段

In [21]: list(t.find({"name":{"$regex": r".*a.*"}},{"name":1, "address":1}))
Out[23]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘), u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘), u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘), u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘), u‘address‘: u‘da zhong si‘, u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘), u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]},
{u‘_id‘: ObjectId(‘4c5fcd7e421aa90fb9000007‘), u‘name‘: u‘abeen_object‘},
{u‘_id‘: ObjectId(‘4c64b432421aa90697000000‘), u‘address‘: u‘shandong‘, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b438421aa90697000001‘), u‘address‘: u‘shandong‘, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b43d421aa90697000002‘), u‘address‘: u‘shandong‘, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b441421aa90697000003‘), u‘address‘: u‘shandong‘, u‘name‘: u‘abeen‘}]

0为不返回字段

In [24]: list(t.find({"name":{"$regex": r".*a.*"}},{"address":0}))
Out[24]:
[{u‘_id‘: ObjectId(‘4c5f9cbc421aa90fb9000000‘), u‘age‘: 27, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c5f9ccb421aa90fb9000001‘), u‘age‘: 22, u‘name‘: u‘shanshan‘},
{u‘_id‘: ObjectId(‘4c5f9d2d421aa90fb9000002‘), u‘age‘: 22, u‘name‘: u‘shanshan2‘},
{u‘_id‘: ObjectId(‘4c5f9d34421aa90fb9000003‘), u‘age‘: 23, u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5fa2ab421aa90fb9000004‘), u‘age‘: 23, u‘name‘: u‘shanshan3‘},
{u‘_id‘: ObjectId(‘4c5facc6421aa90fb9000005‘), u‘name‘: [u‘abeen‘, u‘a‘, u‘b‘, u‘e‘, u‘e‘, u‘n‘]},
{u‘_id‘: ObjectId(‘4c5fcd7e421aa90fb9000007‘), u‘name‘: u‘abeen_object‘},
{u‘_id‘: ObjectId(‘4c64b432421aa90697000000‘), u‘age‘: 22, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b438421aa90697000001‘), u‘age‘: 23, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b43d421aa90697000002‘), u‘age‘: 24, u‘name‘: u‘abeen‘},
{u‘_id‘: ObjectId(‘4c64b441421aa90697000003‘), u‘age‘: 18, u‘name‘: u‘abeen‘}]

标签: MONGODB

2014-03-11 10:25 9213人阅读 评论(3) 收藏 举报

 分类:

NOSQL(41) 


SQL Terms, Functions, and Concepts


MongoDB Aggregation Operators


WHERE


$match


GROUP BY


$group


HAVING


$match


SELECT


$project


ORDER BY


$sort


LIMIT


$limit


SUM()


$sum


COUNT()


$sum


join


No direct corresponding operator; however, the $unwindoperator allows for somewhat similar functionality, but with fields embedded within the document.

实例:
[td]


SQL Example


MongoDB Example


Description


SELECT COUNT(*) AS countFROM orders


db.orders.aggregate( [   { $group: { _id: null,               count: { $sum: 1 } } }] )


Count all records fromorders


SELECT SUM(price) AS totalFROM orders


db.orders.aggregate( [   { $group: { _id: null,               total: { $sum: "$price" } } }] )


Sum theprice field from orders,这个非常有用,看官方说明,说_ID是必须,但没想到可以为NULL,


SELECT cust_id,       SUM(price) AStotalFROM ordersGROUP BY cust_id


db.orders.aggregate( [   { $group: { _id: "$cust_id",               total: { $sum: "$price" } } }] )


For each uniquecust_id, sum the pricefield.


SELECT cust_id,       SUM(price) AStotalFROM ordersGROUP BYcust_idORDER BY total


db.orders.aggregate( [   { $group: { _id: "$cust_id",               total: { $sum: "$price" } } },   { $sort: { total: 1 } }] )


For each uniquecust_id, sum the pricefield, results sorted by sum.


SELECT cust_id,       ord_date,      SUM(price) AS totalFROM ordersGROUPBY cust_id, ord_date


db.orders.aggregate( [   { $group: { _id: { cust_id: "$cust_id",                      ord_date: "$ord_date" },               total: { $sum: "$price" } } }] )


For each uniquecust_id,ord_dategrouping, sum the pricefield.


SELECT cust_id, count(*)FROMordersGROUP BY cust_idHAVING count(*)> 1


db.orders.aggregate( [   { $group: { _id: "$cust_id",               count: { $sum: 1 } } },   { $match: { count: { $gt: 1 } } }] )


For cust_idwith multiple records, return thecust_id and the corresponding record count.


SELECT cust_id,       ord_date,      SUM(price) AS totalFROM ordersGROUPBY cust_id, ord_dateHAVING total > 250


db.orders.aggregate( [   { $group: { _id: { cust_id: "$cust_id",                      ord_date: "$ord_date" },               total: { $sum: "$price" } } },   { $match: { total: { $gt: 250 } } }] )


For each uniquecust_id,ord_dategrouping, sum the pricefield and return only where the sum is greater than 250.


SELECT cust_id,       SUM(price) astotalFROM ordersWHERE status =‘A‘GROUP BY cust_id


db.orders.aggregate( [   { $match: { status: ‘A‘ } },   { $group: { _id: "$cust_id",               total: { $sum: "$price" } } }] )


For each uniquecust_id with status A, sum the pricefield.


SELECT cust_id,       SUM(price) astotalFROM ordersWHERE status =‘A‘GROUP BY cust_idHAVING total > 250


db.orders.aggregate( [   { $match: { status: ‘A‘ } },   { $group: { _id: "$cust_id",               total: { $sum: "$price" } } },   { $match: { total: { $gt: 250 } } }] )


For each uniquecust_id with status A, sum the pricefield and return only where the sum is greater than 250.


SELECT cust_id,       SUM(li.qty) asqtyFROM orders o,     order_lineitem liWHERE li.order_id = o.idGROUP BYcust_id


db.orders.aggregate( [   { $unwind: "$items" },   { $group: { _id: "$cust_id",               qty: { $sum: "$items.qty" } } }] )


For each uniquecust_id, sum the corresponding line item qtyfields associated with the orders.


SELECT COUNT(*)FROM (SELECTcust_id, ord_date      FROM orders      GROUP BY cust_id, ord_date) asDerivedTable


db.orders.aggregate( [   { $group: { _id: { cust_id: "$cust_id",                      ord_date: "$ord_date" } } },   { $group: { _id: null, count: { $sum: 1 } } }] )

时间: 2024-11-05 02:27:11

MONGODB 与sql聚合操作对应图的相关文章

mongoDB与sql聚合操作对应图

SQL Terms, Functions, and Concepts MongoDB Aggregation Operators WHERE $match GROUP BY $group HAVING $match SELECT $project ORDER BY $sort LIMIT $limit SUM() $sum COUNT() $sum join No direct corresponding operator; however, the $unwindoperator allows

MongoDB中的聚合操作

根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.max.min),就需要通过mapReduce来实现了. 在MongoDB2.2版本以后,引入了新的聚合框架(聚合管道,aggregation pipeline ,使用aggregate命令),是一种基于管道概念的数据聚合操作. Name Description count Counts the num

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

上篇博文讲述了排序规则collations的操作和设置方式.顺带介绍了一部分聚合aggregation的设置方式.本文继续介绍聚合操作. 聚合框架的操作处理完数据记录后在返回计算结果.集合操作将来源于多个文档的值归类到一起,这样就可疑在被归类的数据上进行多种操作,然后返回一个单独的结果 1 聚合管道 聚合管道是用于数据聚合的一个框架,是以数据处理管道概念为原型.将文档输入一个多级管道后,可疑将文档转换为聚合的结果.下面以restaurants作为数据集,通过将餐馆类归类,我们就可以使用聚合管道在

MongoDB数据库sql命令操作

概念 RDBMS(关系型数据库管理系统) MongoDB Database(数据库) Database(数据库) Table(表) Collection(集合) Record(记录) Document(文档) 库级操作 use DATABASE #切换/创建库 show dbs #查看所有数据库(空库不会显示) db.dropDatabase() #删除当前数据库 db #查看当前所在库 #集合操作 db.createCollection(name, options) #创建集合 用引号引起来

mongodb 聚合操作

1.首先举例分析下 mongodb 的聚合操作: 该操作表示根据whoisserver_id 字段分组 来统计每个分组下的 count数量: db.anhui.aggregate({$group:{_id:'$whoisserver_id',total:{$sum:1}}}) 查询出来的结果如下: 如果查询总的数量: db.anhui.aggregate({$group:{_id:null,total:{$sum:1}}}) 以下查询先根据条件过滤然后统计 db.anhui.aggregate(

基于Morphia实现MongoDB按小时、按天聚合操作

MongoDB按照天数或小时聚合 需求 最近接到需求,需要对用户账户下的设备状态,分别按照天以及小时进行聚合,以此为基础绘制设备状态趋势图. 实现思路是启动定时任务,对各用户的设备状态数据分别按照小时以及天进行聚合,并存储进数据库中供用户后续查询. 涉及到的技术栈分别为:Spring Boot,MongoDB,Morphia. 数据模型 @Data @Builder @Entity(value = "rawDevStatus", noClassnameStored = true) //

Mongodb聚合操作之读书笔记

Mongodb聚合操作 读书笔记 mongodb,两种计算聚合pipeline和mapreduce pipeline查询速度快于mapreduce,但MapReduce能够在多台Server上并行执行复杂的聚合逻辑. mongodb不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么mongodb直接停止操作,并向客户端输出错误消息. Pipeline方式使用db.collection.aggregate()函数进行聚合运算,运算速度较快,操作简单.

MongoDB 聚合操作(转)

在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑.MongoDB不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么MongoDB直接停止操作,并向客户端输出错误消息. 一,使用 Pipeline 方式计算聚合 Pipeline 方式使用db.collection.aggregate()函

基于 MongoDB 动态字段设计的探索 (二) 聚合操作

业务需求及设计见前文:基于 MongoDB 动态字段设计的探索 根据专业计算各科平均分 (总分.最高分.最低分) public Object avg(String major){ Aggregation aggregation = Aggregation.newAggregation( Aggregation.unwind("courseList"), Aggregation.match(Criteria.where("major").is(major)), Agg