У меня есть объект JSON в MongoDB. Я хочу добавить значение к этому объекту, например, в местах -> машины -> датчики. Я знаю _id для машины, для местоположения и для датчика. Какой самый эффективный способ сделать это?
array(
"_id" => '547f2e4cb54b3a96203c9869',
"name" => Array (
"nl" => "klant1"),
"locations" => Array (
Array (
"_id" => "1",
"name" => Array (
"nl" => "location1",
),
"machines" => Array (
Array (
"_id" => "1",
"name" => Array (
"nl" => "boot1"),
"sensors" => Array (
Array (
"_id" => "1",
"log" => Array (
)
),
Array (
"_id" => "2",
"log" => Array (
)
)
)
),
Array (
"_id" => "2",
"name" => Array (
"nl" => "boot2"),
"sensors" => Array (
Array (
"_id" => "1",
"log" => Array (
)
),
Array (
"_id" => "2",
"log" => Array (
)
)
)
),
Array (
"_id" => "3",
"name" => Array (
"nl" => "boot3"),
"sensors" => Array (
Array (
"_id" => "1",
"log" => Array (
)
),
Array (
"_id" => "2",
"log" => Array (
)
)
)
)
)
)
)
Супер просто. Вы можете сделать findAndModify вызов. Или, если вы хотите сделать это немного больше вручную, вы можете сделать:
$collection = $mongo->your_collection;
$obj = $collection->findOne($query);
$obj = $obj['locations']['machines']['sensors'][] = $new_sensor;
$collection->save($obj);
Монго достаточно умен, чтобы идентифицировать объект, используя _id
ключ, который заставляет его обрабатывать эти сохранения как обновления существующих объектов. Без этого вы будете создавать новые объекты с этим.
Других решений пока нет …