我在这里看到了很多其他 Mongo PHP $push 问题,但由于某种原因,他们所说的都不起作用,所以我发布了我自己的版本。
基本上,我试图遵循 10gen 设置的指南,其中应该使用存储桶来表示新闻提要或博客/评论文章之类的内容 - 制作包含一定数量(50)个事件(评论等)的文档.),然后随着内容的增长创建多个文档。
我想做的是将文档($event
)推送到数组(events
)中,但是当文档不存在(更新插入)。我尝试使用插入来完成此操作,但插入和 $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,但我已经在这个问题上苦苦挣扎了一段时间,但我无能为力。它阻碍了我的整个项目,所以....>:/
最佳答案
您的更新文档格式不正确,请尝试以下操作:
$historyDoc = array('_id' => $uID,
'count' => 1,
'$push' => array('events' => $event));
关于php - mongodb php $push 不插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9962254/