mirror of
https://github.com/mongodb/mongo.git
synced 2024-11-28 16:24:56 +01:00
67 lines
2.4 KiB
JavaScript
67 lines
2.4 KiB
JavaScript
|
//
|
||
|
// Verifies that mongos correctly handles empty documents when all fields are projected out
|
||
|
//
|
||
|
|
||
|
var options = { separateConfig : true,
|
||
|
mongosOptions : { binVersion : "" },
|
||
|
shardOptions : { binVersion : "" } };
|
||
|
|
||
|
var st = new ShardingTest({ shards : 2, other : options });
|
||
|
|
||
|
var mongos = st.s0;
|
||
|
var coll = mongos.getCollection("foo.bar");
|
||
|
var admin = mongos.getDB("admin");
|
||
|
var shards = mongos.getDB("config").shards.find().toArray();
|
||
|
|
||
|
assert.commandWorked(admin.runCommand({ enableSharding : coll.getDB().getName() }));
|
||
|
printjson(admin.runCommand({ movePrimary : coll.getDB().getName(), to : shards[0]._id }));
|
||
|
assert.commandWorked(admin.runCommand({ shardCollection: coll.getFullName(),
|
||
|
key: { _id : 1 } }));
|
||
|
|
||
|
assert.commandWorked(admin.runCommand({ split : coll.getFullName(), middle : { _id : 0 } }));
|
||
|
assert.commandWorked(admin.runCommand({ moveChunk : coll.getFullName(),
|
||
|
find : { _id : 0 },
|
||
|
to : shards[1]._id }));
|
||
|
|
||
|
st.printShardingStatus();
|
||
|
|
||
|
// Insert 100 documents, half of which have an extra field
|
||
|
for (var i = -50; i < 50; i++) {
|
||
|
var doc = {};
|
||
|
if (i >= 0)
|
||
|
doc.positiveId = true;
|
||
|
assert.writeOK(coll.insert(doc));
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// Ensure projecting out all fields still returns the same number of documents
|
||
|
assert.eq(100, coll.find({}).itcount());
|
||
|
assert.eq(100, coll.find({}).sort({ positiveId : 1 }).itcount());
|
||
|
assert.eq(100, coll.find({}, { _id : 0, positiveId : 0 }).itcount());
|
||
|
// Can't remove sort key from projection (SERVER-11877) but some documents will still be empty
|
||
|
assert.eq(100, coll.find({}, { _id : 0 }).sort({ positiveId : 1 }).itcount());
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// Ensure projecting out all fields still returns the same ordering of documents
|
||
|
var assertLast50Positive = function(sortedDocs) {
|
||
|
assert.eq(100, sortedDocs.length);
|
||
|
var positiveCount = 0;
|
||
|
for (var i = 0; i < sortedDocs.length; ++i) {
|
||
|
if (sortedDocs[i].positiveId) {
|
||
|
positiveCount++;
|
||
|
}
|
||
|
else {
|
||
|
// Make sure only the last set of documents have "positiveId" set
|
||
|
assert.eq(positiveCount, 0);
|
||
|
}
|
||
|
}
|
||
|
assert.eq(positiveCount, 50);
|
||
|
};
|
||
|
|
||
|
assertLast50Positive(coll.find({}).sort({ positiveId : 1 }).toArray());
|
||
|
assertLast50Positive(coll.find({}, { _id : 0 }).sort({ positiveId : 1 }).toArray());
|
||
|
|
||
|
jsTest.log("DONE!");
|
||
|
st.stop();
|