整理来自
https://www.shiyanlou.com/courses/running/77
> use Chenshi switched to db Chenshi > db.createCollection("shiyanlou") #无参数 {"ok":1} > show collections shiyanlou system.indexes > userdoc1=({"user_id":1,"name":"cloud","state":"active","actor":"user","e-mail":"test@qq.com","VM_num":2,"time":[{"date":"2014-08-12","hour":"10:53 PM"}] }) > userdoc2=({"user_id":2,"name":"testadmin","state":"active","actor":"admin","e-mail":"test@qq.com","VM_num":2,"time":[{"date":"2014-08-11","hour":"06:34 AM"}] }) > doc=({"name":"peter","position":"teacher"}) > db.shiyanlou.insert(userdoc1) WriteResult({"nInserted":1}) > db.shiyanlou.insert(userdoc2) WriteResult({"nInserted":1}) > db.shiyanlou.insert(doc1) WriteResult({"nInserted":1})
db.COLLECTION_NAME.find(Parameter)范例:
> db.shiyanlou.find()
文档信息,这条指令相当于sqlite中的SELECT * FROM TABLE_NAME
mongodb中的条件操作符有:
范例:
> db.shiyanlou.find({user_id:{$gt:1}}) > db.shiyanlou.find({user_id:{$lte:2,$gt:1}})
语法:
$type
type的值:
范例:
> db.shiyanlou.find({"name":{$type:2}})
查找name是字符串的文档记录
读取指定数量的数据记录 -limit
范例:
> db.shiyanlou.find().limit(1)
读取一条记录,默认是排在最前面的那一条被读取
读取时跳过指定数量的数据记录 -skip
范例:
> db.shiyanlou.find().limit(1).skip(1)
当然,还可以添加find的查找条件的参数,以便进行更精确的查找
与sqlite中的排序一样有升序和降序,其中升序用1表示,降序用-1表示 语法:
db.COLLECTION_NAME.find().sort({KEY:1|-1})
范例:
> db.shiyanlou.find().sort({"time":1})
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,无疑对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库集合中一个文档或多个文档的值进行排序的一种结构。
语法:
db.COLLECTION_NAME.ensureIndex({KEY:1|-1})
同样1代表升序,-1代表降序
范例:
> db.shiyanlou.ensureIndex({"name":1})
ensureIndex()的可选参数:
参数 | 类型 | 描述 |
---|---|---|
background | Boolean | 建立索引要不要阻塞其他数据库操作,默认为false |
unique | Boolean | 建立的索引是否唯一,默认false |
name | string | 索引的名称,若未指定,系统自动生成 |
dropDups | Boolean | 建立唯一索引时,是否删除重复记录,默认flase |
sparse | Boolean | 对文档不存在的字段数据不启用索引,默认false |
expireAfterSeconds | integer | 设置集合的生存时间,单位为秒 |
v | index version | 索引的版本号 |
weights | document | 索引权重值,范围为1到99999 |
default-language | string | 默认为英语 |
language_override | string | 默认值为 language |
范例:
> db.shiyanlou.ensureIndex({"user_id":1,"name":1},{background:1})
语法:
db.COLLECTION_NAME.aggregate({ $match:{x:1}, {limit:NUM}, $group:{_id:$age} })
这些参数都可选
范例:
> db.shiyanlou.aggregate([{$group:{_id:"$name", user:{$sum:"$user_id"}}}])
$name意为取得name的值
名称 | 描述 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
\$min和$max | 计算最小和最大值 |
$push | 在结果文档中插入值到一个数组 |
$addToSet | 在结果文档中插入值到一个数组,但不创建副本 |
$first | 根据资源文档的排序获取第一个文档数据 |
$last | 根据资源文档的排序获取最后一个文档数据 |
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。 聚合框架中常用的几个操作:
范例:
> db.shiyanlou.aggregate([{$match:{user_id:{$gt:0,$lte:2}}},{$group:{_id:"user",count:{$sum:1}}}]) {"_id":"user","count":2}