MongoDBITeye - 威尼斯人

MongoDBITeye

2019年04月03日09时06分07秒 | 作者: 慕卉 | 标签: 文档,测验,调集 | 浏览: 2117

出处:http://www.cnblogs.com/stephen-liu74/archive/2012/09/19/2652308.html

 

MongoDB除了根本的查询功用之外,还供给了强壮的聚合功用。这儿首要介绍count、distinct和group。

 

1. count:

    在空调集中,count回来的数量为0。

    db.test.count()

    0

    测验刺进一个文档后count的回来值。

    db.test.insert({"test":1})

    db.test.count()

    1

    db.test.insert({"test":2})

    db.test.count()

    2

    count和find相同,也承受条件。从成果能够看出,只要契合条件的文档参加了核算。

    db.test.count({"test":1})

    1

     

2. distinct:

    distinct用来找出给定键的一切不同的值。使用时也有必要指定调集和键。

    为了便于后边的测验,先清空测验调集。

    db.test.remove()

    db.test.count()

    0

    刺进4条测验数据。请留心Age字段。

    db.test.insert({"name":"Ada", "age":20})

    db.test.insert({"name":"Fred", "age":35})

    db.test.insert({"name":"Andy", "age":35})

    db.test.insert({"name":"Susan", "age":60})

    distinct指令有必要指定调集称号,如test,以及需求区别的字段,如:age。

    下面的指令将根据test调集中的age字段履行distinct指令。

    db.runCommand({"distinct":"test", "key":"age"})

    {

            "values" : [

                    20,

                    35,

                    60

            ],

            "stats" : {

                    "n" : 4,

                    "nscanned" : 4,

                    "nscannedObjects" : 4,

                    "timems" : 0,

                    "cursor" : "BasicCursor"

            },

            "ok" : 1

    }    

 

3. group:

    group做的聚合有些杂乱。先选定分组所根据的键,尔后MongoDB就会将调集根据选定键值的不同分红若干组。然后能够经过聚合每一组内的文档,发生一个成果文档。

    这儿是预备的测验数据

    db.test.remove()

    db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 03:20:40", "price" : 4.23})

    db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 11:28:00", "price" : 4.27})

    db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 05:00:00", "price" : 4.10})

    db.test.insert({"day" : "2012-08-22", "time" : "2012-08-22 05:26:00", "price" : 4.30})

    db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 08:34:00", "price" : 4.01})

    这儿将用day作为group的分组键,然后取出time键值为最新时刻戳的文档,一起也取出该文档的price键值。

    db.test.group( {

    ... "key" : {"day":true},           如果是多个字段,能够为{"f1":true,"f2":true}

    ... "initial" : {"time" : "0"},       initial表明$reduce函数参数prev的初始值。每个组都有一份该初始值。

    ... "$reduce" : function(doc,prev) {  reduce函数承受两个参数,doc表明正在迭代的当时文档,prev表明累加器文档。

    ...     if (doc.time prev.time) {

    ...         prev.day = doc.day

    ...         prev.price = doc.price;

    ...         prev.time = doc.time;

    ...     }

    ... } } )

    [

        {

            "day" : "2012-08-20",

            "time" : "2012-08-20 05:00:00",

            "price" : 4.1

        },

        {

            "day" : "2012-08-21",

            "time" : "2012-08-21 11:28:00",

            "price" : 4.27

        },

        {

            "day" : "2012-08-22",

            "time" : "2012-08-22 05:26:00",

            "price" : 4.3

        }

    ]

    下面的比如是计算每个分组内文档的数量。

    db.test.group( {

    ... key: { day: true},

    ... initial: {count: 0},

    ... reduce: function(obj,prev){ prev.count++;},

    ... } )

    [

        {

            "day" : "2012-08-20",

            "count" : 2

        },

        {

            "day" : "2012-08-21",

            "count" : 2

        },

        {

            "day" : "2012-08-22",

            "count" : 1

        }

    ]

    最终一个是经过完成器修正reduce成果的比如。

    db.test.group( {

    ... key: { day: true},

    ... initial: {count: 0},

    ... reduce: function(obj,prev){ prev.count++;},

    ... finalize: function(out){ out.scaledCount = out.count * 10 } 在成果文档中新增一个键。

    ... } )

    [

        {

            "day" : "2012-08-20",

            "count" : 2,

            "scaledCount" : 20

        },

        {

            "day" : "2012-08-21",

            "count" : 2,

            "scaledCount" : 20

        },

        {

            "day" : "2012-08-22",

            "count" : 1,

            "scaledCount" : 10

        }    

    ]

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    MongoDBITeye

    文档,测验,调集
  • 3

    RAC的Diskgroup重建ITeye

    磁盘,重建,数据库
  • 4

    Switch to UTFITeye

    编码,设置,文件
  • 5

    pl/sql使用之使用utlITeye

    文件,办法,输出
  • 6
  • 7

    (转)in 和 existITeye

    分区,查询,一个
  • 8

    oracle正则表达式ITeye

    正则表达式,匹配,表达式
  • 9

    SQL句子的优化办法ITeye

    优化,例如,句子
  • 10