MongoDb

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术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接,MongoDB不支持
primary keyprimary 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 对应的术语:

    RDBMSMongoDB
    数据库数据库
    表格集合
    文档
    字段
    表联合嵌入文档
    主键主键 (MongoDB 提供了 key 为 _id )
    数据库服务和客户端
    Mysqld/Oraclemongod
    mysql/sqlplusmongo

    需要注意的是:

    1. 文档中的键/值对是有序的。
    2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
    3. MongoDB区分类型和大小写。
    4. MongoDB的文档不能有重复的键。
    5. 文档的键是字符串。除了少数例外情况,键可以使用任意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 中可以使用的类型如下表所示:

    类型数字备注
    Double1 
    String2 
    Object3 
    Array4 
    Binary data5 
    Undefined6已废弃。
    Object id7 
    Boolean8 
    Date9 
    Null10 
    Regular Expression11 
    JavaScript13 
    Symbol14 
    JavaScript (with scope)15 
    32-bit integer16 
    Timestamp17 
    64-bit integer18 
    Min key255Query with -1.
    Max key127 


    如果想获取 "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() 接收可选参数,可选参数列表如下:

    ParameterTypeDescription
    backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false
    uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
    namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
    dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
    sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
    expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
    vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
    weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
    default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
    language_overridestring

    对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的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监控





    

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值