$ pull отдельный элемент массива - PullRequest
1 голос
/ 08 августа 2011

Я хотел бы иметь возможность удалить элемент массива [1] для обслуживания и оплаты.проблема в том, что в любое время другие элементы

содержат одинаковые значения, все элементы удаляются, т.е.[1] - [8] и [10] - [15].Я попытался ограничить это, указав

идентификатор элемента в скобках, и это тоже не работает.

Если нет повторяющихся значений, следующий код работает отлично.Я могу удалить [1] и [9] без проблем.

$forward = $_POST['id'];
$conn = new Mongo('localhost');
$db = $conn->pianos;
$collection = $db->names;
$criteria = array('_id' => $forward,);


// Find single document by ID Variable 
$obj = $collection->findOne($criteria);


// define variables for Array objects
$service = $obj['service'] [$i];
$charge = $obj['charge'] [$i];

$serv = array('service' => $service, 'charge' => $charge);

$upsert = true; 
        $collection->update($obj, array('$pull' => $serv) ,array("upsert" =>   $upsert));               

Структура документа, предоставленная PhpMoAdmin, приведена ниже.

[$_id] => MongoID Object (
  [$id] => 4e3a8a457bfb8b2817000002
)

[fname] => Billy Bob
[lname] => Thornton

[service] => Array (
[0] => Tune 2 pianos
[1] => Tuned
[2] => Tuned
[3] => Tuned
[4] => Tuned
[5] => Tuned
[6] => Tuned
[7] => Tuned
[8] => Tuned
[9] => Called
[10] => Tuned
[11] => Tuned
[12] => Tuned
[13] => Tuned
[14] => Tuned
[15] => Tuned
)
[charged] => Array (
[0] => 100.00
[1] => 50.00
[2] => 50.00
[3] => 50.00
[4] => 50.00
[5] => 50.00
[6] => 50.00
[7] => 50.00
[8] => 50.00
[9] => 0.00
[10] => 50.00
[11] => 50.00
[12] => 50.00
[13] => 50.00
[14] => 50.00
[15] => 50.00
)

1 Ответ

2 голосов
/ 08 августа 2011

MongoDB не имеет операции модификатора для этого.

Вы можете добавить дату обслуживания для всех записей, чтобы все они стали уникальными.Кроме того, с точки зрения дизайна было бы лучше хранить в массиве поддокументы, которые содержат имя службы, данные и стоимость (и все, что вы добавите позже).

С текущей «схемой» единственноеВы можете получить весь документ, исправить его на стороне клиента и записать обратно.Это не будет атомарным, поэтому убедитесь, что только один пользователь может изменить документ в определенное время.

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