Как обновить объект без удаления сохраненных данных до laravel Монго - PullRequest
1 голос
/ 09 апреля 2020

у меня есть данные:

 {
"_id": {
  "$oid": "5e8f2c11b23e476f93551e13"
},
"vehicle_component_id": 3,
"damages_types": [
  1,
  7
],
"mileages": [
  "0"
],
"damages": {
  "1": {
    "upper_bound": [
      null
    ],
    "damages": [
      "0"
    ],
    "lower_bound": [
      null
    ]
  },
  "7": {
    "upper_bound": [
      null
    ],
    "damages": [
      "0"
    ],
    "lower_bound": [
      null
    ]
  }
},
"created_at": "2020-04-09 16:07:13",
"updated_at": "2020-04-09 16:07:13"

}

, и мне нужно добавить новый объект к объекту повреждений и сохранить все другие данные в повреждениях, я пытаюсь сделать это похоже на

    DB::connection($this->mongoCon)
        ->collection($this->table)
        ->where(['vehicle_component_id' => (int) $vehicleComponentId])
        ->update(
            [
                "damages" => [
                    6 => ["upper_bound" => null], ["damages" => 2], ["lower_bound" => null],
                ],
            ]);

, но результат равен

"damages": {
  "6": {
    "upper_bound": [
      null
    ],
    "damages": [
      "2"
    ],
    "lower_bound": [
      null
    ]
  }
}

, и я пытаюсь сделать его похожим на

"damages": {
      "1": {
        "upper_bound": [
          null
        ],
        "damages": [
          "0"
        ],
        "lower_bound": [
          null
        ]
      },
     "6": {
        "upper_bound": [
          null
        ],
        "damages": [
          "2"
        ],
        "lower_bound": [
          null
        ]
      }
      "7": {
        "upper_bound": [
          null
        ],
        "damages": [
          "0"
        ],
        "lower_bound": [
          null
        ]
      }
    }

, поэтому вопрос будет в том, как добавить новые данные в объект повреждения без удаления старых данных заранее спасибо за любую помощь

Ответы [ 2 ]

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

Чтобы установить поле во встроенных документах, вы можете напрямую использовать dot notation с оператором $set. (Вместо того, чтобы использовать $set для определения всего документа damages)

Вероятно, вам нужен следующий запрос:

db.collection.update(
  { vehicle_component_id: vehicleComponentId },
  {
    $set: {
      "damages.6": { upper_bound: [null], damages: ["2"], lower_bound: [null] },
    },
  }
);
0 голосов
/ 09 апреля 2020

я впервые использую mon go с laravel, так что я новичок в этом, и мое решение такое же, как обычный запрос mon go, как упоминалось ранее в Ответе @ ambianBeing

        DB::connection($this->mongoCon)
        ->collection($this->table)
        ->where(['vehicle_component_id' => (int) $vehicleComponentId])
        ->update(
            [
                "damages.6" =>
                    ["upper_bound" => null], ["damages" => 2], ["lower_bound" => null],
            ]);

возможно, другой совет - использовать этот метод «точечная запись» для добавления данных об объектах и ​​pu sh для добавления данных в массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...