mongodb Python 聚合

python操作mongodb之二聚合查询

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#聚合查询

from pymongo import MongoClient

db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_example

#准备数据

result = db.things.insert_many([{"x"1"tags": ["dog""cat"]},

                              {"x"2"tags": ["cat"]},

                             {"x"2"tags": ["mouse""cat""dog"]},

                               {"x"3"tags": []}])

result.inserted_ids

'''

{ "_id" : ObjectId("576aaa973e5269020848cc7c"), "x" : 1, "tags" : [ "dog", "cat" ] }

{ "_id" : ObjectId("576aaa973e5269020848cc7d"), "x" : 2, "tags" : [ "cat" ] }

{ "_id" : ObjectId("576aaa973e5269020848cc7e"), "x" : 2, "tags" : [ "mouse", "cat", "dog" ] }

{ "_id" : ObjectId("576aaa973e5269020848cc7f"), "x" : 3, "tags" : [ ] }

'''

from bson.son import SON

#$unwind 解开-后面的变量

pipeline = [

     {"$unwind""$tags"},

     {"$group": {"_id""$tags""count": {"$sum"1}}},

     {"$sort": SON([("count"-1), ("_id"-1)])}

 ]

list(db.things.aggregate(pipeline))

#使用聚合函数with command

db.command('aggregate''things', pipeline=pipeline, explain=True)

 

 

"""Map/Reduce"""

from bson.code import Code

mapper = Code("""

              function () {

                this.tags.forEach(function(z) {

                  emit(z, 1);

                });

              }

              """)

 

reducer = Code("""

                function (key, values) {

                  var total = 0;

                  for (var i = 0; i < values.length; i++) {

                    total += values[i];

                  }

                  return total;

                }

                """)

result = db.things.map_reduce(mapper, reducer, "myresults")

for doc in result.find():

    print doc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值