(function() {
|
'use strict';
|
|
var st = new ShardingTest({shards: 2});
|
var sdb = st.s.getDB("test");
|
var inputColl = sdb.input;
|
var outputColl = sdb.output;
|
|
assert.commandWorked(sdb.adminCommand({enableSharding: sdb.getName()}));
|
sdb.adminCommand({movePrimary: sdb.getName(), to: "shard0000"});
|
|
assert.writeOK(inputColl.insert({a: 1, b: 5}));
|
assert.writeOK(inputColl.insert({a: 1, b: 6}));
|
assert.writeOK(inputColl.insert({a: 2, b: 7}));
|
assert.writeOK(inputColl.insert({a: 2, b: 8}));
|
|
// Create a sharded collection with a chunk on each shard.
|
assert.commandWorked(outputColl.ensureIndex({c: 1}));
|
assert.writeOK(outputColl.insert({c: -1}));
|
assert.writeOK(outputColl.insert({c: 1}));
|
assert.commandWorked(sdb.adminCommand({
|
shardCollection: outputColl.getFullName(),
|
key: {c: 1}
|
}));
|
assert.commandWorked(sdb.adminCommand({split: outputColl.getFullName(), middle: {c: 0}}));
|
assert.commandWorked(sdb.adminCommand({
|
moveChunk: outputColl.getFullName(),
|
find: {c: 1},
|
to: "shard0001"
|
}));
|
|
// This creates a collection sharded by {c: 1}, whose documents do not contain the shard key.
|
sdb.runCommand({
|
mapReduce: inputColl.getName(),
|
map: function() {
|
emit(this.a, this.b);
|
},
|
reduce: function(key, values) {
|
var sum = 0;
|
for (var i = 0; i < values.length; i++) {
|
sum += values[i];
|
}
|
return sum;
|
},
|
out: {replace: "output", sharded: true}
|
});
|
|
assert.eq(2, outputColl.find().itcount());
|
})();
|