1

私はこのようなmongoコレクションを持っています:

{
        "_id" : ObjectId("4fd930ecd729f5b31ea5ad03"),
        "O_ORDERKEY" : NumberLong(359),
        "O_CUSTKEY" : {
                "$ref" : "CUSTOMER",
                "$id" : ObjectId("4f973ff37d6517e9723c4d63")
        },
        "O_ORDERSTATUS" : "F",
        "O_TOTALPRICE" : 239998.53,
        "O_ORDERDATE" : ISODate("1994-12-19T02:00:00Z"),
        "O_ORDERPRIORITY" : "3-MEDIUM",
        "O_CLERK" : "Clerk#000000934",
        "O_SHIPPRIORITY" : 0,
        "O_COMMENT" : "furiously final foxes are. regular,"
}

そして、O_SHIPPRIORITY = 0 のときにすべての O_TOTALPRICE を合計したい場合は、次のコマンドを使用します。

db.runCommand({ 
    mapreduce: "ORDERS7", 
    query: {
        O_SHIPPRIORITY: 0
    },
    map : function Map() {
        emit("sum",this.O_TOTALPRICE); 
    },
    reduce : function Reduce(key, values) {
        var sum = 0;
        for (var i = 0; i < values.length; i++) {
            sum += values[i];
        }
        return sum;
    },  
    out: 'query'
});

db.query.find();

しかし、私の結果はこれでした:

{ "_id" : "sum", "value" : null }

値が null である理由は何ですか?

4

1 に答える 1

2

以下は私にとってはうまくいき、説明されているように map-reduce コマンドが問題ないことを示しています。書かれているとおりに以下を試してみて、同じ結果が得られるかどうかを確認してください。もしそうなら、あなたの問題は他の場所にあり、質問に記載されているものではありません。これが役立つことを願っています。

orders7.js

db.ORDERS7.drop();
db.query.drop();
doc0 = {
        "O_ORDERKEY" : NumberLong(359),
        "O_CUSTKEY" : {
                "$ref" : "CUSTOMER",
                "$id" : ObjectId("4f973ff37d6517e9723c4d63")
        },
        "O_ORDERSTATUS" : "F",
        "O_TOTALPRICE" : 239998.53,
        "O_ORDERDATE" : ISODate("1994-12-19T02:00:00Z"),
        "O_ORDERPRIORITY" : "3-MEDIUM",
        "O_CLERK" : "Clerk#000000934",
        "O_SHIPPRIORITY" : 0,
        "O_COMMENT" : "furiously final foxes are. regular,"
};
doc1 = {
        "O_ORDERKEY" : NumberLong(359),
        "O_CUSTKEY" : {
                "$ref" : "CUSTOMER",
                "$id" : ObjectId("4f973ff37d6517e9723c4d63")
        },
        "O_ORDERSTATUS" : "F",
        "O_TOTALPRICE" : 239998.53,
        "O_ORDERDATE" : ISODate("1994-12-19T02:00:00Z"),
        "O_ORDERPRIORITY" : "3-MEDIUM",
        "O_CLERK" : "Clerk#000000934",
        "O_SHIPPRIORITY" : 0,
        "O_COMMENT" : "furiously final foxes are. regular,"
};
db.ORDERS7.save( doc0 );
db.ORDERS7.save( doc1 );
printjson(db.ORDERS7.find().toArray());

printjson(db.runCommand({
    mapreduce: "ORDERS7",
    query: {
        O_SHIPPRIORITY: 0
    },
    map : function Map() {
        emit("sum",this.O_TOTALPRICE);
    },
    reduce : function Reduce(key, values) {
        var sum = 0;
        for (var i = 0; i < values.length; i++) {
            sum += values[i];
        }
        return sum;
    },
    out: 'query'
}));
printjson(db.query.find().toArray());

$ mongo xyzzy orders7.js

MongoDB shell version: 2.1.2
connecting to: xyzzy
[
    {
        "_id" : ObjectId("4ffa368b9ee7cfbc46a3990a"),
        "O_ORDERKEY" : NumberLong(359),
        "O_CUSTKEY" : DBRef("CUSTOMER", ObjectId("4f973ff37d6517e9723c4d63")),
        "O_ORDERSTATUS" : "F",
        "O_TOTALPRICE" : 239998.53,
        "O_ORDERDATE" : ISODate("1994-12-19T02:00:00Z"),
        "O_ORDERPRIORITY" : "3-MEDIUM",
        "O_CLERK" : "Clerk#000000934",
        "O_SHIPPRIORITY" : 0,
        "O_COMMENT" : "furiously final foxes are. regular,"
    },
    {
        "_id" : ObjectId("4ffa368b9ee7cfbc46a3990b"),
        "O_ORDERKEY" : NumberLong(359),
        "O_CUSTKEY" : DBRef("CUSTOMER", ObjectId("4f973ff37d6517e9723c4d63")),
        "O_ORDERSTATUS" : "F",
        "O_TOTALPRICE" : 239998.53,
        "O_ORDERDATE" : ISODate("1994-12-19T02:00:00Z"),
        "O_ORDERPRIORITY" : "3-MEDIUM",
        "O_CLERK" : "Clerk#000000934",
        "O_SHIPPRIORITY" : 0,
        "O_COMMENT" : "furiously final foxes are. regular,"
    }
]
{
    "result" : "query",
    "timeMillis" : 22,
    "counts" : {
        "input" : 2,
        "emit" : 2,
        "reduce" : 1,
        "output" : 1
    },
    "ok" : 1
}
[ { "_id" : "sum", "value" : 479997.06 } ]
于 2012-07-09T01:52:00.133 に答える