MongoDB常识

MongoDB Shell是MongoDB自带的交互式Javascript shell,所以可直接执行JS脚本,用来对MongoDB进行操作和管理的交互式环境。

ObjectId:

MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时。

系统保留数据库名称

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

文档字段类型:

MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

如:

db.reply.insert({name:"美丽",age:10});
db.reply.insert({name:"美丽",age:'50岁了',sex:0})

capped collections

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!

  • 可以插入及更新,但更新不能超出collection的大小,否则更新失败.
  • 它有很高的性能以及队列过期的特性(过期按照插入的顺序)
  • 文档在磁盘上存放位置也是按照插入顺序来保存的.
  • 使用 Capped Collection 不能删除一个文档,可以使用 drop() 方法删除 collection 所有的行。
  • 删除之后,你必须显式的重新创建这个 collection。

用法:

  • 用法1:储存日志信息
  • 用法2:缓存一些少量的文档

MongoDB  URI 协议:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]


update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
例子: 
//更新title=ddddddddddd的所有记录, title被更新为2323
db.col.update({title:"ddddddddddd"}, {$set:{title:"2323"}},{multi:true});
更多实例:
//只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); //全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); //只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); //全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); //全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true ); //只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );


save() 方法

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
<document>,
{
writeConcern: <document>
}
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

备注:

如果集合内部已经存在一个和document 相同的 "_id" 的记录,Mongodb会把document对象替换集合内已存在的记录,如果不存在,则会插入document对象。


find()方法

AND

db.col.find({key1:value1, key2:value2}).pretty()

OR

db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)

demo:

//混合AND ,Or查询
db.col.find({
title:"2323",
$or:[{by:"菜鸟教程"},{name:"name1"}]
})

使用正则表达式

db.posts.find({post_text:{$regex:"runoob"}})

或者:
db.posts.find({post_text:/runoob/})

其他:

//正则匹配
//查询 title 包含"教"字的文档:
db.col.find({title:/教/}) //查询 title 字段以"教"字开头的文档:
db.col.find({title:/^教/}) //查询 titl e字段以"教"字结尾的文档:
db.col.find({title:/教$/}) //$type操作符
db.col.find({"title" : {$type : 2}})
//或
db.col.find({"title" : {$type : 'string'}}) //Limit() 方法
//db.COLLECTION_NAME.find().limit(NUMBER) //Skip() 方法
//db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) //排序,1:升序, -1:降序
//db.COLLECTION_NAME.find().sort({KEY:1})
db.col.find().sort({likes:-1})

索引:

创建索引:

db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
//demo: 创建索引
db.values.createIndex({open: 1, close: 1}, {background: true}) //1、查看集合索引
db.col.getIndexes() //2、查看集合索引大小
db.col.totalIndexSize() //3、删除集合所有索引
db.col.dropIndexes() //4、删除集合指定索引
db.col.dropIndex("索引名称")

高级索引:

考虑以下文档集合(users ):

{
"address": {
"city": "Los Angeles",
"state": "California",
"pincode": "123"
},
"tags": [
"music",
"cricket",
"blogs"
],
"name": "Tom Benzamin"
}

1) 索引数组字段:

db.users.ensureIndex({"tags":1})

该索引支持如下查询:

db.users.find({tags:"cricket"})

2)索引子文档字段

db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

该索引支持如下查询;

db.users.find({"address.city":"Los Angeles","address.state":"California","address.pincode":"123"})

原子操作常用命令

//$set
//用来指定一个键并更新键值,若键不存在并创建。
{ $set : { field : value } } //$unset
//用来删除一个键。
{ $unset : { field : 1} } //$inc
//$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
{ $inc : { field : value } } //$push
{ $push : { field : value } }
//把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。 //$pushAll 同$push,只是一次可以追加多个值到一个数组字段内。
{ $pushAll : { field : value_array } } //$pull
//从数组field内删除一个等于value值。
{ $pull : { field : _value } } //$addToSet
//增加一个值到数组内,而且只有当这个值不在数组内才增加。 //$pop
//删除数组的第一个或最后一个元素
{ $pop : { field : 1 } } //$rename
//修改字段名称
{ $rename : { old_field_name : new_field_name } } //$bit
//位操作,integer类型
{$bit : { field : {and : 5}}} //偏移操作符
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] } > t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true ) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

索引限制

由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。

如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降。

索引不能被以下的查询使用:

  • 正则表达式及非操作符,如 $nin, $not, 等。
  • 算术运算符,如 $mod, 等。
  • $where 子句

Map Reduce

以下是MapReduce的基本语法:

db.collection.mapReduce(
function() {emit(key,value);}, //map 函数
function(key,values) {return reduceFunction}, //reduce 函数
{
out: collection,
query: document,
sort: document,
limit: number
}
)

使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。

Map 函数必须调用 emit(key, value) 返回键值对。

参数说明:

  • map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
  • reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
  • out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
  • query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
  • sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
  • limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

参考引用:

https://blog.csdn.net/qq_27093465/article/details/81332552

http://www.runoob.com/mongodb/mongodb-tutorial.html

												

MongoDB 基本语法笔记的更多相关文章

  1. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  2. Mongodb Manual阅读笔记:CH9 Sharding

    9.分片(Sharding) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb ...

  3. Mongodb Manual阅读笔记:CH8 复制集

    8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  4. Mongodb Manual阅读笔记:CH7 索引

    7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...

  5. Mongodb Manual阅读笔记:CH6 聚合

    6 聚合 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  6. Mongodb源代码阅读笔记:Journal机制

    Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...

  7. Mongodb Manual阅读笔记:CH5 安全性

    5 安全性 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读 ...

  8. Mongodb Manual阅读笔记:CH4 管理

    4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  9. Mongodb Manual阅读笔记:CH3 数据模型(Data Models)

    3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...

随机推荐

  1. Ngine X 完全开发指南 读书笔记-前言

    一开始接触的编程语言是VF,那是一种可视化编程语言,所谓的可视化,就是运行结果能直接看得到的,非常直观,便于调试,适合刚刚接触编程的新人学习.当时学得懵懂,半知半解,就是感觉程序非常神奇,常常几句代码 ...

  2. 【Linux学习六】用户管理

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.增加删除用户或组新增用户useradd scott修改用户密码pa ...

  3. File §2

    Previously speaking,File can be seen as one ducument, also can be seen as list of documents like dir ...

  4. Go语言专题

    基础语法 Go语言配置开发环境 Go语言语法基础 Go语言面向对象 Go语言并发编程 Go语言搭建开发环境 语言库 Go语言fmt包 Go语言字节处理 Go语言字符串处理 Go语言JSON处理 Go语 ...

  5. JS中对象与数组(大括号{}与中括号[])

    一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...

  6. AtCoder Beginner Contest 044 B - 美しい文字列 / Beautiful Strings

    Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement Let w be a string cons ...

  7. GoldenGate实时投递数据到大数据平台(5) - Kafka

    Oracle GoldenGate是Oracle公司的实时数据复制软件,支持关系型数据库和多种大数据平台.从GoldenGate 12.2开始,GoldenGate支持直接投递数据到Kafka等平台, ...

  8. Spring MVC 编程流程步骤

    Spring MVC 编程流程步骤 1. 建立Maven工程 2. 添加Spring MVC依赖 <dependencies> <dependency> <groupId ...

  9. 小纪a

    感觉挺好的两段代码:虽然已经存在,但是这是我自己敲出来的,没有照抄,真心话,所以记录下来. 1.菱形代码: #include <stdio.h>void main() { int i, j ...

  10. 常用MarkDown标记

    1:加粗 两个*号 加粗 2:代码段 三个` 代码段