summaryrefslogtreecommitdiff
path: root/jstests/core/geo_s2sparse.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/geo_s2sparse.js')
-rw-r--r--jstests/core/geo_s2sparse.js251
1 files changed, 125 insertions, 126 deletions
diff --git a/jstests/core/geo_s2sparse.js b/jstests/core/geo_s2sparse.js
index 57f4f73fa3a..2fb93200c44 100644
--- a/jstests/core/geo_s2sparse.js
+++ b/jstests/core/geo_s2sparse.js
@@ -2,131 +2,130 @@
// All V2 2dsphere indices are sparse in the geo fields.
(function() {
- "use strict";
-
- var coll = db.geo_s2sparse;
- var point = {type: "Point", coordinates: [5, 5]};
- var indexSpec = {geo: "2dsphere", nonGeo: 1};
- var indexName = 'geo_2dsphere_nonGeo_1';
-
- //
- // V2 indices are "geo sparse" always.
- //
-
- // Clean up.
- coll.drop();
- coll.ensureIndex(indexSpec);
-
- var bulkInsertDocs = function(coll, numDocs, makeDocFn) {
- print("Bulk inserting " + numDocs + " documents");
-
- var bulk = coll.initializeUnorderedBulkOp();
- for (var i = 0; i < numDocs; ++i) {
- bulk.insert(makeDocFn(i));
- }
-
- assert.writeOK(bulk.execute());
-
- print("Bulk inserting " + numDocs + " documents completed");
- };
-
- // Insert N documents with the geo field.
- var N = 1000;
- bulkInsertDocs(coll, N, function(i) {
- return {geo: point, nonGeo: "point_" + i};
- });
-
- // Expect N keys.
- assert.eq(N, coll.validate().keysPerIndex[indexName]);
-
- // Insert N documents without the geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {wrongGeo: point, nonGeo: i};
- });
-
- // Still expect N keys as we didn't insert any geo stuff.
- assert.eq(N, coll.validate().keysPerIndex[indexName]);
-
- // Insert N documents with just the geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {geo: point};
- });
-
- // Expect 2N keys.
- assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
-
- // Add some "not geo" stuff.
- bulkInsertDocs(coll, N, function(i) {
- return {geo: null};
- });
- bulkInsertDocs(coll, N, function(i) {
- return {geo: []};
- });
- bulkInsertDocs(coll, N, function(i) {
- return {geo: undefined};
- });
- bulkInsertDocs(coll, N, function(i) {
- return {geo: {}};
- });
-
- // Still expect 2N keys.
- assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
-
- //
- // V1 indices are never sparse
- //
-
- coll.drop();
- coll.ensureIndex(indexSpec, {"2dsphereIndexVersion": 1});
-
- // Insert N documents with the geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {geo: point, nonGeo: "point_" + i};
- });
-
- // Expect N keys.
- assert.eq(N, coll.validate().keysPerIndex[indexName]);
-
- // Insert N documents without the geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {wrongGeo: point, nonGeo: i};
- });
-
- // Expect N keys as it's a V1 index.
- assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
-
- //
- // V2 indices with several 2dsphere-indexed fields are only sparse if all are missing.
- //
-
- // Clean up.
- coll.drop();
- coll.ensureIndex({geo: "2dsphere", otherGeo: "2dsphere"});
-
- indexName = 'geo_2dsphere_otherGeo_2dsphere';
-
- // Insert N documents with the first geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {geo: point};
- });
-
- // Expect N keys.
- assert.eq(N, coll.validate().keysPerIndex[indexName]);
-
- // Insert N documents with the second geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {otherGeo: point};
- });
-
- // They get inserted too.
- assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
-
- // Insert N documents with neither geo field.
- bulkInsertDocs(coll, N, function(i) {
- return {nonGeo: i};
- });
-
- // Still expect 2N keys as the neither geo docs were omitted from the index.
- assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
+"use strict";
+
+var coll = db.geo_s2sparse;
+var point = {type: "Point", coordinates: [5, 5]};
+var indexSpec = {geo: "2dsphere", nonGeo: 1};
+var indexName = 'geo_2dsphere_nonGeo_1';
+
+//
+// V2 indices are "geo sparse" always.
+//
+// Clean up.
+coll.drop();
+coll.ensureIndex(indexSpec);
+
+var bulkInsertDocs = function(coll, numDocs, makeDocFn) {
+ print("Bulk inserting " + numDocs + " documents");
+
+ var bulk = coll.initializeUnorderedBulkOp();
+ for (var i = 0; i < numDocs; ++i) {
+ bulk.insert(makeDocFn(i));
+ }
+
+ assert.writeOK(bulk.execute());
+
+ print("Bulk inserting " + numDocs + " documents completed");
+};
+
+// Insert N documents with the geo field.
+var N = 1000;
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: point, nonGeo: "point_" + i};
+});
+
+// Expect N keys.
+assert.eq(N, coll.validate().keysPerIndex[indexName]);
+
+// Insert N documents without the geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {wrongGeo: point, nonGeo: i};
+});
+
+// Still expect N keys as we didn't insert any geo stuff.
+assert.eq(N, coll.validate().keysPerIndex[indexName]);
+
+// Insert N documents with just the geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: point};
+});
+
+// Expect 2N keys.
+assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
+
+// Add some "not geo" stuff.
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: null};
+});
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: []};
+});
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: undefined};
+});
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: {}};
+});
+
+// Still expect 2N keys.
+assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
+
+//
+// V1 indices are never sparse
+//
+
+coll.drop();
+coll.ensureIndex(indexSpec, {"2dsphereIndexVersion": 1});
+
+// Insert N documents with the geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: point, nonGeo: "point_" + i};
+});
+
+// Expect N keys.
+assert.eq(N, coll.validate().keysPerIndex[indexName]);
+
+// Insert N documents without the geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {wrongGeo: point, nonGeo: i};
+});
+
+// Expect N keys as it's a V1 index.
+assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
+
+//
+// V2 indices with several 2dsphere-indexed fields are only sparse if all are missing.
+//
+
+// Clean up.
+coll.drop();
+coll.ensureIndex({geo: "2dsphere", otherGeo: "2dsphere"});
+
+indexName = 'geo_2dsphere_otherGeo_2dsphere';
+
+// Insert N documents with the first geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {geo: point};
+});
+
+// Expect N keys.
+assert.eq(N, coll.validate().keysPerIndex[indexName]);
+
+// Insert N documents with the second geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {otherGeo: point};
+});
+
+// They get inserted too.
+assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
+
+// Insert N documents with neither geo field.
+bulkInsertDocs(coll, N, function(i) {
+ return {nonGeo: i};
+});
+
+// Still expect 2N keys as the neither geo docs were omitted from the index.
+assert.eq(N + N, coll.validate().keysPerIndex[indexName]);
})();