【发布时间】:2012-04-03 12:40:47
【问题描述】:
我在 SO 上看到了一堆其他 Mongo PHP $push 问题,但出于某种原因,他们所说的没有一个有效,所以我发布了我自己的版本。
基本上,我正在尝试遵循 10gen 设置的准则,在该准则中,应该使用存储桶来表示新闻提要或博客/评论文章之类的内容 - 制作包含一定数量 (50) 事件(cmets 等)的文档.),然后随着内容的增长创建多个文档。
我想要做的是将文档 ($event) 推送到一个数组 (events) 中,但是当文档不存在时(更新插入),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,但我一直在努力解决这个问题,但我无能为力。它支撑着我的整个项目,所以....>:/
【问题讨论】: