Я видел несколько других вопросов о толковании PHP $ Mongo здесь, на SO, но по какой-то причине ничего из того, что они говорят, не работает, поэтому я публикую свою собственную версию.
По сути, я пытаюсь следовать руководству, установленному 10gen, где представление чего-то вроде новостной ленты или поста блога / комментария должно выполняться с использованием сегментов - создание документов, содержащих определенное количество (50) событий (комментариев и т. Д.) .), а затем создает несколько документов по мере роста содержания.
Я пытаюсь вставить документы ($event
) в массив (events
), но, похоже, возникает некоторая путаница с PHP, когда документ не существует (upserting). Я пытался сделать это с помощью вставки, но вставка и $push
не очень хорошо сочетаются друг с другом.
Вот что у меня сейчас есть:
$historyDoc = array('_id'=>$uID, 'count'=>1,
array('$push' => array('events' => $event)));
$query = array('_id'=>$uID);
//add user to history
$collection->update($query,$historyDoc,
array('safe'=>true,'timeout'=>5000,'upsert'=>true));
Где $event
- это правильно отформатированный массив (документ) вещей (например, отметка времени, идентификатор пользователя, действие, имя), а $uID
- объект MongoID, взятый из другой коллекции.
Результат, который я получаю, таков:
{
"_id": {
"$oid": "4f77ec39fef97a3965000000"
},
"0": {
"$push": {
"events": {
"timestamp": 1333259321,
"action": "achievement",
"pts": 0,
"name": "join"
}
}
},
"count": 1
}
Что хорошо, потому что мой документ, по крайней мере, отображается правильно, но как, черт возьми, есть ключ с "$" в нем? Не похоже, что я не смог уйти от $
... Я очень внимательно использовал одинарные кавычки именно по этой причине.
Может быть, я что-то упускаю, или я сломал PHP, но я боролся с этим некоторое время, и я ничего не могу с этим поделать. Он держит весь мой проект, так что ...>: /