Я, вероятно, здесь упускаю что-то простое, но я не могу найти способ построить запрос, который позволил бы мне обновить совпадение в группе вложенных значений.
У меня есть такой документ для блога, над которым я сейчас работаю (в настоящее время использует MySQL):
array (
'_id' => new MongoId("4bc8dcee8ba936a8101a0000"),
'created' => '20100418-201312 +0000',
'post-title' => 'Some Post Title',
'post-body' => 'Blah Blah Blah Blah.',
'post-blog-name' => 'default',
'post-comments' =>
array (
0 =>
array (
'comment-title' => 'Test1',
'comment-body' => 'asdf1',
'created' => '20100418-214512 +0000',
'owner' => 'User1',
),
1 =>
array (
'comment-title' => 'Test2',
'comment-body' => 'asdf2',
'created' => '20100418-214512 +0000',
'owner' => 'User2',
),
),
'owner' => 'zach',
'updated' => '20100418-201312 +0000',
)
Я хотел бы иметь возможность создать запрос, который может искать «комментарий-заголовок» на предмет соответствия, а затем разрешать мне обновлять / изменять / удалять данные по мере необходимости.
Очевидно, что я могу выполнить обновление, используя запрос, который включает значение ключа. Примерно так работает:
$collection->update(
array("post-comments.0.comment-title" => $_POST['comment-title']),
array('$set' => array('entries.0' => array('comment-title' => $_POST['comment-title'], 'comment-body' => $_POST['comment-body'], 'owner' => $_SESSION['username'], 'updated' => gmdate('Ymd\-His O')))));
Но я ожидаю, что мне не хватает чего-то, что позволило бы мне пропустить ключ и все-таки иметь возможность сопоставить один из вложенных массивов на основе значения (в данном примере 'comment-title').
Во всяком случае, извините, это, вероятно, не лучший пример, и я, вероятно, в конечном итоге в конечном итоге будет использовать ключи в комментариях для их идентификации (комментарий #), но, поскольку вложение и создание довольно сложных объектов, кажется несколько сильных сторон Mongodbs Я просто надеюсь, что кто-то может указать, что я могу упустить.
Лучшим примером может служить запрос на удаление или обновление всех комментариев определенного пользователя (скажем, пользователя, автора блога которого только что занесли в черный список). Я не уверен, как бы мне это было сделать, если не вытащить весь документ, а затем перебрать вложенные массивы с помощью PHP.