我見過一堆其他Mongo PHP $推送到這裏的問題,但由於某種原因,他們所說的沒有一個工作,所以我張貼我自己的版。
基本上,我試圖遵循的準則通過10gen的代表在那裏像一個新聞源或博客/留言後應該用桶來完成設置 - 讓持有事件的一定數量(50)的文件(意見,等等),然後隨着內容的增長創建多個文檔。
我想要做的是將文檔($event
)推送到一個數組(events
),但是當文檔不存在時(upserting),似乎與PHP有一些混淆。我試圖用插入,但插入和$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
是一個事物的正確格式的數組(文件)(例如,時間戳,用戶ID,動作名稱),$uID
從另一個採取MongoID對象採集。
,我得到的結果是這樣的:
{
"_id": {
"$oid": "4f77ec39fef97a3965000000"
},
"0": {
"$push": {
"events": {
"timestamp": 1333259321,
"action": "achievement",
"pts": 0,
"name": "join"
}
}
},
"count": 1
}
這是很好的,因爲我的文檔至少顯示出來的權利,但如何地獄是存在的,在這一個「$」的關鍵?這並不是因爲我沒有逃過$
......我一直非常專注於使用單引號。
也許有一些我錯過了,或者我打破了PHP,但我一直在摔跤這個一段時間,沒有什麼我可以做的。它牽着我的整個項目了,所以....>:/
您更新文檔中形成不良的
試過之前。我只是做了一遍,這裏是我得到的錯誤消息:異常'MongoCursorException'與消息'修飾符和非修飾符不能混合'在/var/fog/apps/app34260/trinker.phpfogapp.com/php/register .PHP:190'。我在PHP Mongo手冊中看到了一些看起來很有前途的東西,所以我會嘗試一下。 – 2012-04-01 06:16:18
啊,的確,你不能混合這些。嘗試將'count'轉換爲'$ set'。不過,你不能'設置'_id'。 – 2012-04-01 06:19:36
我有一個解決方案,但愚蠢的StackOverflow不會讓我發佈另外7個小時,因爲我沒有超過100個代表。像聲譽系統反彈的時代就是這樣的時代。擰你,SO。請參閱:我的編輯解決方案 – 2012-04-01 06:24:53