-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
Affects Version/s: None
-
Query
-
Fully Compatible
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
The keys produced by the mapReduce emit function are always compared using the simple collation rather than the mapReduce operation's collation. For example, consider the following script:
db.c.drop();
db.c.insert({_id: 1, str: "foo"});
db.c.insert({_id: 2, str: "FOO"});
db.c.insert({_id: 3, str: "bar"});
db.c.insert({_id: 4, str: "BAR"});
db.c.mapReduce(
function() { emit(this.str, 1); },
function(key, values) { return Array.sum(values); },
{out: {inline: 1}, collation: {locale: "en", strength: 2}}
);
This script produces output such as the following:
{
"results" : [
{
"_id" : "BAR",
"value" : 1
},
{
"_id" : "FOO",
"value" : 1
},
{
"_id" : "bar",
"value" : 1
},
{
"_id" : "foo",
"value" : 1
}
],
"timeMillis" : 133,
"counts" : {
"input" : 4,
"emit" : 4,
"reduce" : 0,
"output" : 4
},
"ok" : 1
}
Since the operation is using the English case-insensitive collation, one might expect the results array to contain 2 elements rather than 4. This is because "FOO" == "foo" and "BAR" == "bar" with respect to the collation.
- is related to
-
SERVER-26422 Group command does not group with respect to the collation
-
- Closed
-