Как избежать знака $$ при написании bash? - PullRequest
0 голосов
/ 09 апреля 2020

Как избежать знака $$ при написании bash?

, если я хочу написать $let Я делаю это: \"\$let\" и все работает нормально.

но если я хочу написать $$building.gateways, как мне это сделать? В настоящее время пытается как: \"\$\$building.gateways\", но не работает.

Ниже строки, например:

COMMAND+=",\"in\": { \"\$let\": {\"vars\": {\"gateway\": {\"\$arrayElemAt\": [{\"\$filter\": {\"input\": \"\$\$building.gateways\",\"cond\": {\"\$eq\": [\"\$\$this._id\",\"\$gatewayId\"]}}},0]}}"

ОБНОВЛЕНО: я пытаюсь преобразовать синтаксис запроса ниже mon go в сценарий bash.

device: {
        $let: {
          vars: {
            building: {
              $arrayElemAt: [
                {
                  $filter: {
                    input: "$accountInfo.buildings",
                    cond: {
                      $eq: [
                        "$$this._id",
                        "$buildingId"
                      ]
                    }
                  }
                },
                0
              ]
            }
          },
          in: {
            $let: {
              vars: {
                gateway: {
                  $arrayElemAt: [
                    {
                      $filter: {
                        input: "$$building.gateways",
                        cond: {
                          $eq: [
                            "$$this._id",
                            "$gatewayId"
                          ]
                        }
                      }
                    },
                    0
                  ]
                }
              },
              in: {
                $arrayElemAt: [
                  {
                    $filter: {
                      input: "$$gateway.devices",
                      cond: {
                        $eq: [
                          "$$this._id",
                          "$deviceId"
                        ]
                      }
                    }
                  },
                  0
                ]
              }
            }
          }
        }
      }

This это то, что у меня есть сейчас, но это не работает. (Я думаю, что часть с $$ терпит неудачу и возвращает ноль). запрос работает в оболочке mon go, поэтому запрос правильный.

  \"device\": {\"\$let\": {\"vars\": {\"building\": {\"\$arrayElemAt\": [{\"\$filter\": {\"input\": \"\$accountInfo.buildings\",\"cond\": {\"\$eq\": [\"\$\$this._id\",\"\$buildingId\"]}}},0]}},
          \"in\": {\"\$let\": {\"vars\": {\"gateway\": {\"\$arrayElemAt\": [{\"\$filter\": {\"input\": \"\$\$building.gateways\",\"cond\": {\"\$eq\": [\"\$\$this._id\",\"\$gatewayId\"]}}},0]}},
              \"in\": {\"\$arrayElemAt\": [{\"\$filter\": {\"input\": \"\$\$gateway.devices\",\"cond\": { \"\$eq\": [\"\$\$this._id\", \"\$deviceId\"]}}},0]}}}}}

Спасибо

1 Ответ

2 голосов
/ 09 апреля 2020

Поместите все это в одинарные кавычки.

query='
device: {
        $let: {
          vars: {
            building: {
              $arrayElemAt: [
                {
                  $filter: {
                    input: "$accountInfo.buildings",
                    cond: {
                      $eq: [
                        "$$this._id",
                        "$buildingId"
                      ]
                    }
                  }
                },
                0
              ]
            }
          },
          in: {
            $let: {
              vars: {
                gateway: {
                  $arrayElemAt: [
                    {
                      $filter: {
                        input: "$$building.gateways",
                        cond: {
                          $eq: [
                            "$$this._id",
                            "$gatewayId"
                          ]
                        }
                      }
                    },
                    0
                  ]
                }
              },
              in: {
                $arrayElemAt: [
                  {
                    $filter: {
                      input: "$$gateway.devices",
                      cond: {
                        $eq: [
                          "$$this._id",
                          "$deviceId"
                        ]
                      }
                    }
                  },
                  0
                ]
              }
            }
          }
        }
      }
'
echo "$query"

См. Это в https://ideone.com/7YB0Ll

...