Details
-
Task
-
Resolution: Done
-
Major - P3
-
None
-
None
-
None
-
Execution Team 2021-07-12, Execution Team 2021-07-26, Execution Team 2021-08-09
-
70
Description
Because metadata does not vary within a bucket, geo indexes on metadata can use an ordinary geo index on the time-series buckets collection.
For example,
{
|
createIndexes: “abc”,
|
indexes: [ { key: { “metaFieldName.a” : "2dsphere" } } ] |
}
|
|
will become
{
|
createIndexes: “system.buckets.abc”,
|
indexes: [ { key: { “meta.a” : "2dsphere" } } ] |
}
|
Â
Â
Â
JS test code
assert.eq(1,
|
timeseriescoll.aggregate([
|
{$geoNear: {
|
near: {type: "Point", coordinates: [40.4, -70.4]},
|
distanceField: "dist",
|
spherical: true
|
}},
|
{$limit: 1}
|
]).toArray().length,
|
"Failed to use 2dsphere index: " + tojson(twoDSphereBucketsIndexSpec));
|
JS test logs
[js_test:timeseries_special_indexes] assert: command failed: {
|
[js_test:timeseries_special_indexes] "ok" : 0,
|
[js_test:timeseries_special_indexes] "errmsg" : "$geoNear is only valid as the first stage in a pipeline.",
|
[js_test:timeseries_special_indexes] "code" : 40602,
|
[js_test:timeseries_special_indexes] "codeName" : "Location40602"
|
[js_test:timeseries_special_indexes] } with original command request: {
|
[js_test:timeseries_special_indexes] "aggregate" : "timeseries_special_indexes_coll",
|
[js_test:timeseries_special_indexes] "pipeline" : [
|
[js_test:timeseries_special_indexes] {
|
[js_test:timeseries_special_indexes] "$geoNear" : {
|
[js_test:timeseries_special_indexes] "near" : {
|
[js_test:timeseries_special_indexes] "type" : "Point",
|
[js_test:timeseries_special_indexes] "coordinates" : [
|
[js_test:timeseries_special_indexes] 40.4,
|
[js_test:timeseries_special_indexes] -70.4
|
[js_test:timeseries_special_indexes] ]
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] "distanceField" : "dist",
|
[js_test:timeseries_special_indexes] "spherical" : true
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] {
|
[js_test:timeseries_special_indexes] "$limit" : 1
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] ],
|
[js_test:timeseries_special_indexes] "cursor" : {
|
[js_test:timeseries_special_indexes]
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] "lsid" : {
|
[js_test:timeseries_special_indexes] "id" : UUID("073e7905-4789-4ab9-88f2-45fb46cb2f97")
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] } on connection: connection to localhost:50190 : aggregate failed
|
[js_test:timeseries_special_indexes] _getErrorWithCode@src/mongo/shell/utils.js:25:13
|
[js_test:timeseries_special_indexes] doassert@src/mongo/shell/assert.js:18:14
|
[js_test:timeseries_special_indexes] _assertCommandWorked@src/mongo/shell/assert.js:719:17
|
[js_test:timeseries_special_indexes] assert.commandWorked@src/mongo/shell/assert.js:811:16
|
[js_test:timeseries_special_indexes] DB.prototype._runAggregate@src/mongo/shell/db.js:268:5
|
[js_test:timeseries_special_indexes] DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1056:12
|
[js_test:timeseries_special_indexes] @jstests/core/timeseries/timeseries_special_indexes.js:210:11
|
[js_test:timeseries_special_indexes] @jstests/core/timeseries/timeseries_special_indexes.js:18:2
|
[js_test:timeseries_special_indexes] uncaught exception: Error: command failed: {
|
[js_test:timeseries_special_indexes] "ok" : 0,
|
[js_test:timeseries_special_indexes] "errmsg" : "$geoNear is only valid as the first stage in a pipeline.",
|
[js_test:timeseries_special_indexes] "code" : 40602,
|
[js_test:timeseries_special_indexes] "codeName" : "Location40602"
|
[js_test:timeseries_special_indexes] } with original command request: {
|
[js_test:timeseries_special_indexes] "aggregate" : "timeseries_special_indexes_coll",
|
[js_test:timeseries_special_indexes] "pipeline" : [
|
[js_test:timeseries_special_indexes] {
|
[js_test:timeseries_special_indexes] "$geoNear" : {
|
[js_test:timeseries_special_indexes] "near" : {
|
[js_test:timeseries_special_indexes] "type" : "Point",
|
[js_test:timeseries_special_indexes] "coordinates" : [
|
[js_test:timeseries_special_indexes] 40.4,
|
[js_test:timeseries_special_indexes] -70.4
|
[js_test:timeseries_special_indexes] ]
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] "distanceField" : "dist",
|
[js_test:timeseries_special_indexes] "spherical" : true
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] {
|
[js_test:timeseries_special_indexes] "$limit" : 1
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] ],
|
[js_test:timeseries_special_indexes] "cursor" : {
|
[js_test:timeseries_special_indexes]
|
[js_test:timeseries_special_indexes] },
|
[js_test:timeseries_special_indexes] "lsid" : {
|
[js_test:timeseries_special_indexes] "id" : UUID("073e7905-4789-4ab9-88f2-45fb46cb2f97")
|
[js_test:timeseries_special_indexes] }
|
[js_test:timeseries_special_indexes] } on connection: connection to localhost:50190 : aggregate failed :
|
[js_test:timeseries_special_indexes] _getErrorWithCode@src/mongo/shell/utils.js:25:13
|
[js_test:timeseries_special_indexes] doassert@src/mongo/shell/assert.js:18:14
|
[js_test:timeseries_special_indexes] _assertCommandWorked@src/mongo/shell/assert.js:719:17
|
[js_test:timeseries_special_indexes] assert.commandWorked@src/mongo/shell/assert.js:811:16
|
[js_test:timeseries_special_indexes] DB.prototype._runAggregate@src/mongo/shell/db.js:268:5
|
[js_test:timeseries_special_indexes] DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1056:12
|
[js_test:timeseries_special_indexes] @jstests/core/timeseries/timeseries_special_indexes.js:210:11
|
[js_test:timeseries_special_indexes] @jstests/core/timeseries/timeseries_special_indexes.js:18:2
|
[js_test:timeseries_special_indexes] failed to load: jstests/core/timeseries/timeseries_special_indexes.js
|
Note: the same query on the corresponding buckets collection works fine, so the index is created via the time-series collection, we just can't use it.
Attachments
Issue Links
- is depended on by
-
SERVER-58602 Rewrite $geoNear to $geoWithin + compute distance + $sort
-
- Closed
-
- is duplicated by
-
SERVER-55608 Allow geo queries on time series views for metadata
-
- Closed
-
- related to
-
SERVER-54642 Support other index types on the metadata fields in a time-series collection.
-
- Closed
-