3

pyMongo を使用してインライン mapreduce 操作を実行しようとしています。

コードは次のようになります。

import pymongo
from bson.code import Code

con = pymongo.MongoClient()

map_func = Code("""
                function() {
                    var all = this.members.concat(this.admins)
                    var group_id = this._id
                    all.forEach(function(_id) {
                        emit(_id, [group_id])
                    })
                }
                """)

reduce_func = Code("""
                   function(key, values) {
                        var ob = {};
                        ob[key] = [];
                        for (var i=0; i<values.length; i++) {
                            ob[key].push(values[i][0])
                        }
                        return ob
                   }
                   """)

finalize_func = Code("""
                     function(key, value) {
                        if (typeof(value.push) == "function") {
                            return value
                        } else {
                            return value[key]
                        }
                     }
                     """)

result = con.test.group.inline_map_reduce(
    map_func,
    reduce_func,
    finalize=finalize_func)

import pprint; pprint.pprint(result)

この操作の出力は次のとおりです。

 [{u'_id': u'135348133252952338363702',
  u'value': [u'135457069105859781018098',
             u'135661481520484615218098',
             u'135391961249458761918098',
             u'135758863859275369318098',
             u'135156779012512657918098',
             u'135285081801846289218098',
             u'136040996346306049718098',
             u'136237587535011048218098',
             u'136862399436556328318098']},
 {u'_id': u'136068596781820946163702',
  u'value': [u'136068597966313224518098',
             u'135156779012512657918098',
             u'136415311739865096818098']}]

出力フィールドの名前を「values」ではなく「group_id」などのカスタム文字列に変更できるフック/演算子はありますか?

Mongo の MapReduce ドキュメントを読みましたが、これを達成する方法に関するヒントは見つかりませんでした。

4

2 に答える 2

1

いいえ、削減された値は常に という名前のフィールドにありますvalue

于 2013-06-11T19:47:18.670 に答える