Why $let is so slow?

Data(10.000 documents like the bellow)

{ "myarray"  [0 1 2 ... 999]}        //array with 1000 members

Query1 ($add)

[ {
    "$addFields" : {
      "myarray" : {
        "$map" : {
          "input" : "$myarray",
          "as" : "n",
          "in" : {
            "$add" : [ {
              "$add" : [ {
                "$add" : [ {
                  "$add" : [ {
                    "$add" : [ {
                      "$add" : [ {
                        "$add" : [ {
                          "$add" : [ "$$n", 1 ]
                        }, 1 ]
                      }, 1 ]
                    }, 1 ]
                  }, 1 ]
                }, 1 ]
              }, 1 ]
            }, 1 ]
          }
        }
      }
    }
  } ]

Query2 ($let)

[ {
    "$addFields" : {
      "myarray" : {
        "$map" : {
          "input" : "$myarray",
          "as" : "n",
          "in" : {
            "$let" : {
              "vars" : {
                "n1" : {
                  "$add" : [ "$$n", 1 ]
                }
              },
              "in" : {
                "$let" : {
                  "vars" : {
                    "n2" : {
                      "$add" : [ "$$n1", 1 ]
                    }
                  },
                  "in" : {
                    "$let" : {
                      "vars" : {
                        "n3" : {
                          "$add" : [ "$$n2", 1 ]
                        }
                      },
                      "in" : {
                        "$let" : {
                          "vars" : {
                            "n4" : {
                              "$add" : [ "$$n3", 1 ]
                            }
                          },
                          "in" : {
                            "$let" : {
                              "vars" : {
                                "n5" : {
                                  "$add" : [ "$$n4", 1 ]
                                }
                              },
                              "in" : {
                                "$let" : {
                                  "vars" : {
                                    "n6" : {
                                      "$add" : [ "$$n5", 1 ]
                                    }
                                  },
                                  "in" : {
                                    "$let" : {
                                      "vars" : {
                                        "n7" : {
                                          "$add" : [ "$$n6", 1 ]
                                        }
                                      },
                                      "in" : "$$n7"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  } ]

Results

"Elapsed time: 1884.386048 msecs"    $add
"Elapsed time: 8507.002225 msecs"    $let (4x)

Thank you

1 Like