php - mongodb php $push 不插入数组

标签 php mongodb

我在这里看到了很多其他 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/

相关文章:

php - Zend setElementsBelongTo() 对子表单元素的影响

c# - 如何在MongoDB的FindOne中使用SetField For C# Driver

javascript - 如何在div内的html页面中显示js文件中的json数据

php - Symfony 2 - 我应该在哪里放置实用程序类?

database - 使用过滤器中的值更新文档

javascript - 无法读取 null 的属性 'password'

mongodb - Mongo "Unrecognized pipeline stage name: ' $filter'"

MongoDB "Connection refused"错误

PHP:在 while 循环期间更改查询变量

php - 如何从扩展 PHP 类中的静态调用中获取类名?