Mongodb и PHP: как запросить вложенные массивы без использования имени ключа - PullRequest
0 голосов
/ 21 апреля 2010

Я, вероятно, здесь упускаю что-то простое, но я не могу найти способ построить запрос, который позволил бы мне обновить совпадение в группе вложенных значений.

У меня есть такой документ для блога, над которым я сейчас работаю (в настоящее время использует 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.

1 Ответ

1 голос
/ 21 апреля 2010

попробуйте ... обратите внимание, я удалил "ключ"

$collection->update(array("post-comments.comment-title" ...

Ура! * * 1004

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