2014-12-11 6 views
3

MongoDB에 json 객체가 있습니다. 이 오브젝트에 값을 추가하고 싶습니다. 예를 들어, 위치 -> 시스템 -> 센서. 기계, 위치 및 센서의 _id를 알고 있습니다. 가장 효율적인 방법은 무엇입니까?MongoDB의 obejct에 값을 추가하십시오.

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 (
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
+0

가독성을 높이기 위해 스키마를 게시 할 수 있습니까? – BatScream

+0

이 작업에는 MySQL을 사용해야합니다. ;) –

+0

각 레벨에 대해'_id'로 2 중첩 된 배열을 일치 시키려면 [SERVER-831] (https://jira.mongodb.org/browse/server-831)이 필요합니다. 일반적으로이 문제를 해결하는 방법 (그리고 결국 더 나은 결과를 얻는 방법)은 스키마를 다시 디자인하여 중첩 된 배열이 없도록하는 것입니다. 그러나 유스 케이스에 대해 더 많이 알지 못하면 어떻게해야 최선이라고 말할 수 있습니다. – wdberkeley

답변

0

매우 쉽습니다. findAndModify 전화를 걸 수 있습니다. 당신이 좀 더 수동으로 수행하려는 경우 또는, 당신은 할 수 있습니다 :

$collection = $mongo->your_collection; 
$obj = $collection->findOne($query); 
$obj = $obj['locations']['machines']['sensors'][] = $new_sensor; 
$collection->save($obj); 

몽고는 이러한 기존 개체에 대한 업데이트로 저장 처리됩니다 _id 키를 사용하여 객체를 식별 할 수있을만큼 똑똑하다. 그것 없이는 새로운 객체를 생성 할 수 있습니다.

관련 문제