I have been playing around and found a query which works on Mongo Dedicated, but not on Mongo Serverless. It’s simple and it’s not part of Serverless limitations as far as i have checked.
Ok, so i have the following collection:
[
{
“domain”: “http://example.com”,
“name”: “example”,
“result”: [
{
“isRunning”: true
}
],
“resultIsRunning”: [
true
]
}
]
When I run following query on Serverless:
[
{
$match: {
_id: ObjectId(“663cc77517d2b8f137746b3b”),
},
},
{
$addFields: {
resultIsRunningMapped: {
$map: {
input: “$result”,
as: “res”,
in: “$$res.isRunning”,
},
},
},
},
{
$match: {
resultIsRunning: {
$elemMatch: {
$eq: true,
},
},
},
},
{
$match: {
resultIsRunningMapped: {
$elemMatch: {
$eq: true,
},
},
},
},
]
- Stage outputs the object as expected, but the 4th stage does not.
I found that modifying the 2. stage like:
resultIsRunningMapped: {
$map: {
input: { $ifNull: [“$result”, ] },
as: “res”,
in: “$$res.isRunning”,
},
}
or like:
resultIsRunningMapped: {
$map: {
input: “$result”,
as: “res”,
in: { $toBool: “$$res.isRunning” },
},
}
will fix the problem, but i have zero clue why it fixes the problem.
NOTE: this only happens on Mongo Serverless, on Mongo Dedicated it work just fine without any fixes - which is very unexpected.
Has anyone encountered a similar problem or knows whats the problem here ?
Thanks in advance,
Lazar