mongodb 基本语法总结
来源:互联网 发布:fgo淘宝石头号注意事项 编辑:程序博客网 时间:2024/06/16 08:07
只总结了一些跟关系型数据库区别比较大的 应该注意的 难点的语法及概念
1.db.collection.update( criteria, objNew, upsert, multi )
Db.collection.distinct(“title”)返回一个title 的json
Db.collection.group(key initial reduce)
Group 不支持分片 可以用mapreduce解决。
Key 分组的键 initial 分组结果提供基数 reduce (正在当前遍历的当前文档(调用数据库),和聚集计数对象(要显示的))
Eg:
db.test.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){
prev.num++
}});
//注意,$keyf指定的函数一定要返回一个对象
db.test.group({$keyf:function(doc){return {age:doc.age};},initial:{num:0},$reduce:function(doc,prev){
prev.num++
}
db.test.group({$keyf:function(doc){return {age:doc.age};},initial:{num:0},$reduce:function(doc,prev){
prev.num++
},
finalize: function(doc){ doc.count=doc.num;delete doc.num; }
}); finalize 可以在最终结算之前返回一个参数 比如平均数。
Mapreduce
MapReduce应该算是MongoDB操作中比较复杂的了,自己开始理解的时候还是动了动脑子的,所以记录在此!
命令语法:详细看
db.runCommand(
{ mapreduce : 字符串,集合名,
map : 函数,见下文
reduce : 函数,见下文
[, query : 文档,发往map函数前先给过渡文档]
[, sort : 文档,发往map函数前先给文档排序]
[, limit : 整数,发往map函数的文档数量上限]
[, out : 字符串,统计结果保存的集合]
[, keeptemp: 布尔值,链接关闭时临时结果集合是否保存]
[, finalize : 函数,将reduce的结果送给这个函数,做最后的处理]
[, scope : 文档,js代码中要用到的变量]
[, jsMode : 布尔值,是否减少执行过程中BSON和JS的转换,默认true] //注:false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce,<br> //true时BSON-->js-->map-->reduce-->BSON
[, verbose : 布尔值,是否产生更加详细的服务器日志,默认true]
}
);
$ne 之外的所有文档
$in nin:[,,]
$all 满足所有
$or
$mod:[2,1] 奇偶
$slice [1,2] 第一个参数 返回数据项的总数 第二个 有参数则第一个为偏移量
且 slice 放在{},后面
$size 显示数组个数
$exists title :{~:true} 现实带有title的所有文档
$not ds
创建验证码的同时 创建一个时间戳 发送 过来的时候在创建一个
robot.Set()
http://www.cnblogs.com/mxw09/archive/2011/08/31/2161457.html(group讲解)
update()函数接受以下四个参数:
· criteria : update的查询条件,类似sql update查询内where后面的。
· objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
· upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
· multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
2.$type 根据参数类型查询
$type操作符是基于BSON类型来检索集合中匹配的结果。
MongoDB中可以使用的类型:
类型描述
类型值
Double
1
String
2
Object
3
Array
4
Binary data
5
Object id
7
Boolean
8
Date
9
Null
10
Regular expression
11
JavaScript code
13
Symbol
14
JavaScript code with scope
15
32-bit integer
16
Timestamp
17
64-bit integer
18
Min key
255
Max key
127
3.· > db.t.find().sort({_id:-1}).skip(1).limit(1)
· { "_id" : 8 }
· > db.t.find().skip(1).sort({_id:-1}).limit(1)
· { "_id" : 8 }
· > db.t.find().skip(1).limit(1).sort({_id:-1})
· { "_id" : 8 }
当你调用find方法的时候,shell并不会立刻去查询数据库,直到你真正请求结果的时候才发送查询,这样你可以在实际执行查询之前,追加一些其他的选项,游标的这些方法几乎都是返回游标本身,所以你可以按任意顺序链入这些方法,所以以上三个查询是等价的。
但是
db.c.find().sort({username : 1, age : -1})
MongoDB处理不同的类型的数据是有顺序的.有时候一个键的值可能是多种类型的,如:整数,布尔型,字符串或null.如果对这种混合类型的键进行排序,其排序顺序从小到大如下:
1. Minimum value
2. null
3. Numbers (integers, longs, doubles)
4. Strings
5. Object/document
6. Array
7. Binary data
8. Object ID
9. Boolean
10. Date
11. Timestamp
12. Regular expression
13. Maximum value
最小值,null,数字,字符串,对象/文档,数组,二进制数据,对象id,布尔型,日期型,时间戳,正则表达式,最大值.
4.sort() 1升序 -1降序
5.创建索引
db.values.ensureIndex({open: 1, close: 1}, {background: true})
6.聚合查询
WHERE
$match
GROUP BY
$group
HAVING
$match
SELECT
$project
ORDER BY
$sort
LIMIT
$limit
SUM()
$sum
COUNT()
$sum
· $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。(select)
· $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 (Where having)
· $limit:用来限制MongoDB聚合管道返回的文档数。
· $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
· $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
· $group:将集合中的文档分组,可用于统计结果。
· $sort:将输入文档排序后输出。
· $geoNear:输出接近某一地理位置的有序文档。
7.MongoDB 引用有两种:
· 手动引用(Manual References)
· DBRefs
· $ref:集合名称
· $id:引用的id
· $db:数据库名称,可选参数
http://www.w3cschool.cc/mongodb/mongodb-database-references.html
8.查询分析
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
"cursor" : "BtreeCursor gender_1_user_name_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 0,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 0,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : true,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
· indexOnly: 字段为 true ,表示我们使用了索引。
· cursor: 因为这个查询使用了索引,MongoDB中索引存储在B树结构中,所以这是也使用了BtreeCursor类型的游标。如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建, 由于存储索引信息,这个稍微会提到)来得到索引的详细信息。
· n:当前查询返回的文档数量。
· nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。
· millis:当前查询所需时间,毫秒数。
· indexBounds:当前查询具体使用的索引。
Hint 制定搜索
db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
原子操作常用命令
http://chenzhou123520.iteye.com/blog/1637629
$set
用来指定一个键并更新键值,若键不存在并创建。
{ $set : { field : value } }
$unset
用来删除一个键。
{ $unset : { field : 1} }
$inc
$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
{ $inc : { field : value } }
$push unset pull 对比
用法: 可以添加数组 也可以更新数组
{ $push : { field : value } }
· db.students.find()
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }
· > db.students.update({name:"chenzhou"},{$push:{"ailas":"Michael"}})
· > db.students.find()
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }
· >
把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。
$pushAll
同$push,只是一次可以追加多个值到一个数组字段内。
{ $pushAll : { field : value_array } }
$pull
从数组field内删除一个等于value值。
{ $pull : { field : _value } }
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }
· > db.students.update({name:"chenzhou"},{$pull:{"ailas":"A1"}})
· > db.students.find()
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A2" ], "name" : "chenzhou" }
$addToSet 在数组内添加数组
增加一个值到数组内,而且只有当这个值不在数组内才增加。
· > db.students.find()
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }
· > db.students.update({name:"chenzhou"},{$addToSet:{"ailas":["A3","A4"]}})
· > db.students.find()
· { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }
· >
$pop 同pull 的区别是 pop不知道要删除value的名字
删除数组的第一个或最后一个元素
{ $pop : { field : 1 } }
$rename
修改字段名称
{ $rename : { old_field_name : new_field_name } }
$bit
位操作,integer类型
{$bit : { field : {and : 5}}}
高级篇:聚合框剪
db.gg.aggregate([{$match:{}},{$group:{_id:{cu_id:"$cu_id",status:"$status"},to
tal:{$sum:"$amount"}}},{$limit:4},{$sort:{total:-1}}])
$unwind
$project 用法
mapReduce: 用法很深 只有简单的例子一枚:
备份 分片 优化
- mongodb 基本语法总结
- MongoDB 基本操作语法
- MongoDB基本语法详解
- MongoDB基本语法
- MongoDB基本语法
- mongodb的基本语法
- MongoDB基本语法
- Mongodb语法总结
- mongodb入门之mongodb基本语法
- mongodb 基本操作总结
- JSP 基本语法总结
- SQLServer基本语法总结
- shell 基本语法总结
- javascript基本语法总结
- JavaScript基本语法总结
- Java基本语法总结
- Java基本语法总结
- Lua基本语法总结
- 为中国人辩护!百度其实并未作弊
- 《毕业5年决定你的一生》
- hdu4508——湫湫系列故事——减肥记I(背包)
- 深度学习的一些总结(Introduce to Deep learning)
- 106 浏览器判断 正则的妙用
- mongodb 基本语法总结
- JQuery 全选 全不选 反选
- The final local variable cannot be assigned, since it is defined in an enclosing type
- JAVA对象的强,弱,虚引用
- AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0
- C——位运算的学习要点
- 写在今年暑假前
- spring 初始化报错
- 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)