http://pan.baidu.com/share/link?shareid=2634729037&uk=3422579373#path=%252F
http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html#_labelStart
http://www.cnblogs.com/chenqingwei/p/4084418.html
http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html
MongoDb 入门
1.下载MongoDB并解压:https://www.mongodb.com/download-center。
2.启动MongoDb服务方式:(mongod.exe就是Mongodb服务)
方式一:执行命令行(mongod.exe)方式安装Mongodb服务:
打开cmd命令窗口定位到MongoDb的bin目录下,输入命令mongod.exe --dbpath:"D:\mongodbData\data"。
配置环境变量:我的电脑-属性-高级系统设置-环境变量-系统变量-找到path-编辑,在最后一个“\”后加一个“;”,然后把MongoDb的bin目录的路径粘贴-确定。
方式二:以windows服务方式安装MongoDb服务
以管理员身份打开cmd命令窗口定位到MongoDb的bin目录下,输入命令:mongod --install --dbpath:D:\mongodbData\data --logpath D:\mongodbData\data\log\mongodb.log --port 27017 --logappend --bind_Ip 127.0.0.1.(必须先建立好文件夹)
启动mongodb服务:net start mongodb
卸载mongodb服务:cmd 转到c盘根目录,sc delete mongodb
参数列表:--install:表示以windows服务安装Mongodb,--ddpath: 表示数据库所在文件夹路径,D:\mongodbData\data路径实在D盘中建立的文件夹路径(也可将该文件建在Mongodb的bin文件夹中). --logpath:表示日志文件路径,-port:端口号,默认是27017,--bind_id:绑定的服务ip. (默认为本机ip), .至于mongod的更多命令行参数,请输入命令: mongod /?来获得。
也可将这些参数写在一个mongodb.conf 文件中,然后输入命令 mongod --install --config “C:\Users\v-lozhu\Downloads\mongodb-win32-x86_64-enterprise-windows-64-3.4.6\bin\mongodb.conf”来安装mongodb服务,如下:
安装Mongodb服务后,在windows service中可以看到Mongodb服务已经启动:
在数据库文件data中生成了一些mongodb相关的文件:
4.通过cmd命令窗口使用mongo命令连接mongodb服务器进行操作mongodb数据库:
打开cmd命令窗口定位到MongoDb的bin目录下,输入命令:mongo 127.0.0.1:27017
之后就可以使用命令来对mongodb数据库进行操作了
5.顺便提一下:运行mongod后,它会显示一些有用的信息。比如:pid (进程ID), tcp port (监听端口), http 端口(用于查看运行状态), 操作系统版本,数据目录,32 or 64位版本,如果是32位版本,它还会告诉你【数据有2G的限制】,所以正式使用建议运行64位版本。
6.下载MongoDb 的C#驱动(Mongodb.dll),以让我们在C#中使用Mongodb。我们在C#访问MongoDB所需的驱动就是项目MongoDB了。编译这个项目就能得到了,文件名:MongoDB.dll。
7.在C#使用MongoDB:
在项目中引用Mongodb.dll,
创建一个实体类:Customer.cs:
public class Customer
{
[MongoId]
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public string ContactName { get; set; }
public string Address { get; set; }
public string PostalCode { get; set; }
public string Tel { get; set; }
}
代码中的[MongoId]也是可以不要的,
说明一下:MongoDB在使用前,并不要求您事先创建好相应的数据库,设计数据表结构!
在MongoDB中,没有【表】的概念,取而代之的是【集合】,也没有【数据记录】的概念,取而代之的是【文档】, 我们可以把【文档】理解成一个【对象】,任意的对象,甚至可以有复杂的嵌套层次。因此,我们不用再写代码从【数据表字段】到C#类的【属性,字段】的转换了,现在直接就可以读写整个对象了。而且MongoDB不支持Join操作,所以,如果有【关联】操作,就需要你自己来处理。
封装Mongodb:
public class MyMongoDb : IDisposable
{
private Mongo _mongo;
private IMongoDatabase _db;
public MyMongoDb()
: this("Server=172.0.0.1", "MyNorthwind")
{
}
public MyMongoDb(string connectionString, string dbName)
{
if (string.IsNullOrEmpty(connectionString))
{
throw new ArgumentNullException("connectionString");
}
_mongo = new Mongo(connectionString);
//立即连接
_mongo.Connect();
if (!string.IsNullOrEmpty(dbName))
{
_db = _mongo.GetDatabase(dbName);
}
}
//切换到指定的数据库
public IMongoDatabase UseDb(string dbName)
{
if (string.IsNullOrEmpty(dbName))
throw new ArgumentNullException("dbName");
_db = _mongo.GetDatabase(dbName);
return _db;
}
//获取当前连接的数据库
public IMongoDatabase CurrentDb
{
get
{
if (_db == null)
{
throw new Exception("当前没有指定任何数据库,请在构造函数中指定数据库或调用UseDb切换数据库。");
}
return _db;
}
}
//获取当前连接数据库的指定集合(依据类型)
public IMongoCollection<T> GetCollection<T>() where T : class
{
return this.CurrentDb.GetCollection<T>();
}
//获取当前连接数据库的指定集合(依据指定名称)
public IMongoCollection<T> GetCollection<T>(string name) where T : class
{
return this.CurrentDb.GetCollection<T>(name);
}
public void Dispose()
{
if (_mongo != null)
{
_mongo.Dispose();
_mongo = null;
}
}
}
创建MongoDbHelper.cs:(MongoDb的增删改查)
public class MongoDbHelper
{
//private static readonly string _connectionStrng = "Server=127.0.0.1";
//private static readonly string __dbName = "MyNorthwind";
新增记录
//public void Insert(Customer customer)
//{
// customer.CustomerID = Guid.NewGuid().ToString("N");
// using (Mongo mongo = new Mongo(_connectionStrng))//创建一个连接
// {
// mongo.Connect();//打开连接
// var db = mongo.GetDatabase(__dbName);//切换到指定的数据库
// var collection = db.GetCollection<Customer>( );//根据类型获取相应的集合
// collection.Insert(customer);//向集合中插入相应的对象
// }
//}
删除记录
//public void Delete(string customerId)
//{
// using (Mongo mongo = new Mongo(_connectionStrng))
// {
// mongo.Connect();
// var db = mongo.GetDatabase(__dbName);
// var collection = db.GetCollection<Customer>();
// collection.Remove(c => c.CustomerID == customerId);//从集合中删除指定的对象
// }
//}
更新记录
//public void Update(Customer customer)
//{
// using (Mongo mongo = new Mongo(_connectionStrng))
// {
// mongo.Connect();
// var db = mongo.GetDatabase(__dbName);
// var collection = db.GetCollection<Customer>();
// collection.Update(customer, (c => c.CustomerID == customer.CustomerID));
// }
//}
获取分页列表
//public List<Customer> GetList(string searchWord, PagingInfo pagingInfo)
//{
// using (Mongo mongo = new Mongo(_connectionStrng))
// {
// mongo.Connect();
// var db = mongo.GetDatabase(__dbName);
// var collectin = db.GetCollection<Customer>();
// var query = from c in collectin.Linq()//先建一个查询
// select c;
// if (!string.IsNullOrEmpty(searchWord))//增加查询过滤条件
// {
// query = query.Where(c => c.CustomerName.Contains(searchWord) ||
// c.Address.Contains(searchWord));
// }
// //先按名称排序,再返回分页结果
// IOrderedQueryable<Customer> orderedCustomer = query.OrderBy(c => c.CustomerName);
// return null;
// }
//}
//public Customer GetById(string customerId)
//{
// using (Mongo mongo = new Mongo(_connectionStrng))
// {
// mongo.Connect();
// var db = mongo.GetDatabase(__dbName);
// var collection = db.GetCollection<Customer>();
// //查询单个对象
// Customer customer = collection.FindOne(c => c.CustomerID == customerId);
// return customer;
// }
//}
public void Insert(Customer customer)
{
customer.CustomerID = Guid.NewGuid().ToString("N");
using (MyMongoDb mongo = new MyMongoDb())
{
mongo.GetCollection<Customer>().Insert(customer);
}
}
public void Delete(string customerId)
{
using (MyMongoDb mongo = new MyMongoDb())
{
mongo.GetCollection<Customer>().Remove(c => c.CustomerID == customerId);
}
}
public void Update(Customer customer)
{
using (MyMongoDb mongo = new MyMongoDb())
{
mongo.GetCollection<Customer>().Update(customer, (c => c.CustomerID == customer.CustomerID));
}
}
public Customer GetById(string customerId)
{
using (MyMongoDb mongo = new MyMongoDb())
{
return mongo.GetCollection<Customer>().FindOne(c=>c.CustomerID==customerId );
}
}
}
8.下表将帮助您更容易理解Mongo中的一些概念:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
1)数据库
"show dbs" 命令可以显示所有数据的列表,执行 "db" 命令可以显示当前数据库对象或集合,运行"use"命令,可以连接到一个指定的数据库。
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
- 不能是空字符串("")。
- 不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
- 应全部小写。
- 最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
2)文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{"site":"www.runoob.com", "name":"菜鸟教程"}
下表列出了 RDBMS 与 MongoDB 对应的术语:
RDBMS MongoDB 数据库 数据库 表格 集合 行 文档 列 字段 表联合 嵌入文档 主键 主键 (MongoDB 提供了 key 为 _id ) 数据库服务和客户端 Mysqld/Oracle mongod mysql/sqlplus mongo 需要注意的是:
- 文档中的键/值对是有序的。
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
- 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
- .和$有特别的意义,只有在特定环境下才能使用。
- 以下划线"_"开头的键是保留的(不是严格要求的)。
3)集合:db.col.findOne()
合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中:
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鸟教程","num":5}
合法的集合名
- 集合名不能是空字符串""。
- 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
- 集合名不能以"system."开头,这是为系统集合保留的前缀。
- 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
固定大小的集合:建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的:db.createCollection("mycoll",{capped:true, size:100000}),指定的存储大小包含了数据库的头信息。
- 在capped collection中,你能添加新的对象。
- 能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
- 数据库不允许进行删除。使用drop()方法删除collection所有的行。
- 注意: 删除之后,你必须显式的重新创建这个collection。
- 在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。
4)元数据
数据库的元数据是存储在集合中。它们使用了系统的命名空间:dbname.system.*
在MongoDB数据库中名字空间 <dbname>.system.* 是包含多种系统信息的特殊集合(Collection),如下:
集合命名空间 描述 dbname.system.namespaces 列出所有名字空间。 dbname.system.indexes 列出所有索引。 dbname.system.profile 包含数据库概要(profile)信息。 dbname.system.users 列出所有可访问数据库的用户。 dbname.local.sources 包含复制对端(slave)的服务器信息和状态。 对于修改系统集合中的对象有如下限制。
在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
{{system.users}}是可修改的。 {{system.profile}}是可删除的。
5)Mongodb数据类型
下表为MongoDB中常用的几种数据类型。
数据类型 描述 String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 Boolean 布尔值。用于存储布尔值(真/假)。 Double 双精度浮点值。用于存储浮点值。 Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 Arrays 用于将数组或列表或多个值存储为一个键。 Timestamp 时间戳。记录文档修改或添加的具体时间。 Object 用于内嵌文档。 Null 用于创建空值。 Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 Object ID 对象 ID。用于创建文档的 ID。 Binary Data 二进制数据。用于存储二进制数据。 Code 代码类型。用于在文档中存储 JavaScript 代码。 Regular expression 正则表达式类型。用于存储正则表达式。
9.Mongodb Shell 命令
use runoob , show dbs, db.
1)删除数据库: use runoob db.dropDatabase()
2)向数据库插入文档:
>use runoob
>db.col.insert({title:'MongoDB 教程', description:'MongoDB 是一个 Nosql 数据库',by:'菜鸟教程', url:'http://www.runoob.com', tags:['mongodb','database','NoSQL'], likes:100})
> db.col.find() /db.col.find().pretty()
{"_id":ObjectId("56064886ade2f21f36b03134"),"title":"MongoDB 教程","description":"MongoDB 是一个 Nosql 数据库","by":"菜鸟教程","url":"http://www.runoob.com","tags":["mongodb","database","NoSQL"],"likes":100}
也可以将数据定义为一个变量,然后再插入:
> document=({title:'MongoDB 教程', description:'MongoDB 是一个 Nosql 数据库',by:'菜鸟教程', url:'http://www.runoob.com', tags:['mongodb','database','NoSQL'], likes:100});
> db.col.insert(document)WriteResult({"nInserted":1})
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
3)更新文档:
update 方法:
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true :>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}).
save方法:save() 方法通过传入的文档来替换已有文档
>db.col.save({"_id":ObjectId("56064f89ade2f21f36b03136"),"title":"MongoDB","description":"MongoDB 是一个 Nosql 数据库","by":"Runoob","url":"http://www.runoob.com","tags":["mongodb","NoSQL"],"likes":110})
只更新第一条记录:
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 );
4)删除文档
>db.col.remove({'title':'MongoDB 教程'})
如果你只想删除第一条找到的记录可以设置 justOne 为 1:db.col.remove({'title','MongoDB 教程'},{'justOne ',1})
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):>db.col.remove({})
5)查询文档
>db.col.find()或>db.col.find().pretty():pretty() 方法以格式化的方式来显示所有文档。还有一个db.col.findOne() 方法,它只返回一个文档。
条件查询:
操作 格式 范例 RDBMS中的类似语句 等于 {<key>:<value>
}db.col.find({"by":"菜鸟教程"}).pretty()
where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}}
db.col.find({"likes":{$lt:50}}).pretty()
where likes < 50
小于或等于 {<key>:{$lte:<value>}}
db.col.find({"likes":{$lte:50}}).pretty()
where likes <= 50
大于 {<key>:{$gt:<value>}}
db.col.find({"likes":{$gt:50}}).pretty()
where likes > 50
大于或等于 {<key>:{$gte:<value>}}
db.col.find({"likes":{$gte:50}}).pretty()
where likes >= 50
不等于 {<key>:{$ne:<value>}}
db.col.find({"likes":{$ne:50}}).pretty()
where likes != 50
and 条件查询:MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,类似常规 SQL 的 AND 条件。
db.col.find({"by":"菜鸟教程","title":"MongoDB 教程"}).pretty(),类似于 WHERE 语句:WHERE by='菜鸟教程' AND title='MongoDB 教程'
or条件查询:db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]}).pretty()
AND 和 OR 联合查询:db.col.find({"likes":{$gt:50}, $or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]}).pretty(),类似常规 SQL 语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
6)条件操作符:
MongoDB中条件操作符有:
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<= ) 小于等于 - $lte
7)$type操作符:$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
类型 数字 备注 Double 1 String 2 Object 3 Array 4 Binary data 5 Undefined 6 已废弃。 Object id 7 Boolean 8 Date 9 Null 10 Regular Expression 11 JavaScript 13 Symbol 14 JavaScript (with scope) 15 32-bit integer 16 Timestamp 17 64-bit integer 18 Min key 255 Query with -1. Max key 127
如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({"title":{$type:2}})
8)limit()与skip()方法:
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.col.find({},{"title":1,_id:0}).limit(2)
可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
9)Mongodb排序
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
按字段 likes 的降序排列:
10)Mongodb索引
MongoDB使用 ensureIndex() 方法来创建索引。、
db.col.ensureIndex({"title":1,"description":-1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。ensureIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
ensureIndex() 接收可选参数,可选参数列表如下:
Parameter Type Description background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。 unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 dropDups Boolean 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
在后台创建索引: db.values.ensureIndex({open:1, close:1},{background:true})
11)Mongodb聚合:
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
MongoDB中聚合的方法使用aggregate()。
计算每个作者所写的文章数,使用aggregate()计算结果如下:
> db.mycol.aggregate([{$group:{_id:"$by_user", num_tutorial:{$sum:1}}}])
{"result":[{"_id":"w3cschool.cc","num_tutorial":2},{"_id":"Neo4j","num_tutorial":1}],"ok":1}
类似sql语句: select by_user, count(*) from mycol group by by_user
下表展示了一些聚合的表达式:
表达式 描述 实例 $sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$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"}}}]) 12)Mongodb管道:
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
13)Mongodb 复制
14)Mongodb分片
15)Mongodb备份与恢复
16)Mongodb监控