The following command should work, but doesn't on a mongos:
{
aggregate: 'coll0',
pipeline: [
{
'$match': { '$expr': { '$eq': [ '$_id', 2] } }
},
{ '$project': { _id: 0, y: '$$y'} }
],
let: { y: { '$literal': '$bar' } },
cursor: {}
}
If you look at the profiler in the shards, it looks like we just need to preserve a $const or $literal in the serialization. That is dropped and we just end up with y: "$bar":
{
"op" : "command",
"ns" : "test.coll0",
"command" : {
"aggregate" : "coll0",
"pipeline" : [
{
"$match" : {
"$expr" : {
"$eq" : [
"$_id",
2
]
}
}
},
{
"$project" : {
"_id" : 0,
"y" : "$$y"
}
}
],
"cursor" : {
"batchSize" : NumberLong(101)
},
"let" : {
"y" : "$bar"
},
"fromMongos" : false,
"readConcern" : {
"level" : "local",
"provenance" : "implicitDefault"
},
"writeConcern" : {
"w" : "majority",
"wtimeout" : 0,
"provenance" : "customDefault"
},
"shardVersion" : [
Timestamp(0, 0),
ObjectId("000000000000000000000000")
],
"databaseVersion" : {
"uuid" : UUID("d40d3f32-02c0-42aa-939d-2d5f640d43b6"),
"timestamp" : Timestamp(1622740896, 32),
"lastMod" : 1
},
"lsid" : {
"id" : UUID("bd190341-9e6d-4458-b8df-35a7dd5a5072"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"$clusterTime" : {
"clusterTime" : Timestamp(1622741302, 25),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"$configTime" : Timestamp(1622741302, 25),
"$topologyTime" : Timestamp(1622740776, 3),
"$client" : {
"application" : {
"name" : "MongoDB Shell"
},
"driver" : {
"name" : "MongoDB Internal Client",
"version" : "5.0.0-rc0"
},
"os" : {
"type" : "Darwin",
"name" : "Mac OS X",
"architecture" : "x86_64",
"version" : "19.4.0"
},
"mongos" : {
"host" : "charlie-macbook-pro:20003",
"client" : "127.0.0.1:54610",
"version" : "5.0.0-rc0"
}
},
"$configServerState" : {
"opTime" : {
"ts" : Timestamp(1622741302, 25),
"t" : NumberLong(-1)
}
},
"$db" : "test"
},
"numYield" : 0,
"locks" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(1)
}
},
"Mutex" : {
"acquireCount" : {
"r" : NumberLong(2)
}
}
},
"flowControl" : {
},
"readConcern" : {
"level" : "local",
"provenance" : "implicitDefault"
},
"writeConcern" : {
"w" : "majority",
"wtimeout" : 0,
"provenance" : "customDefault"
},
"ok" : 0,
"errMsg" : "Command let Expression tried to access a field, but this is not allowed because Command let Expressions run before the query examines any documents.",
"errName" : "Location4890500",
"errCode" : 4890500,
"responseLength" : 578,
"protocol" : "op_msg",
"millis" : 0,
"ts" : ISODate("2021-06-03T17:28:30.794Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [ ],
"user" : ""
}
- is depended on by
-
DRIVERS-776 Support 'let' option for aggregate command
-
- Closed
-
- is related to
-
SERVER-89268 Missing 'let' variable incorrectly serialized as empty object
-
- Closed
-
-
SERVER-46707 Support 'let' variables in aggregate command in sharded deployments
-
- Closed
-
- related to
-
SERVER-69504 Leave index build phase intact upon exception during collection scan
-
- Closed
-