我希望能够删除服务和收费的数组元素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
)发布于 2011-08-08 06:45:54
MongoDB对此没有修饰符操作。
您可以为所有条目添加服务日期,以便所有条目都变得唯一。此外,从设计的角度来看,最好将包含服务名称、数据和费用(以及稍后添加的内容)的子文档存储在数组中。
对于当前的“模式”,您唯一能做的就是检索整个文档,在客户端修复它,然后将其写回。这将不是原子的,因此请确保只有一个用户可以在特定时间修改文档。
https://stackoverflow.com/questions/6976212
复制相似问题