1

目前,我运行一个类似于以下内容的 mongo 查询:

$query = array(
    'user_id' => $this->getUserId(),
    'name'    => $this->getName()
);

我检查记录是否存在,如果存在我想更新它,如果不创建它。

if(is_null($this->getId())) {
    $query['created'] = date('Y-m-d H:i:s');
    $this->collection->insert($query);
    $this->setId($query['_id']);
    return true;
} else {
    $conditions = array(
     '_id' => new \MongoId($this->getId())
    );
    return $this->collection->update($conditions, $query);
}

目前,如果记录是新的,则会添加“创建”日期字段。但是,当我运行更新时,mongoDb 似乎恢复了正确的记录,但删除了创建的字段,而不是保持原样。

我尝试添加'created' => $this->getCreated()$query$conditions,都证明不成功。有什么明显的我做错了导致我想单独删除的字段吗?

4

2 回答 2

2

这是因为你的$query价值。这是一个常见的初学者错误。

将整个查询文档放入更新中,如下所示:

$query = array(
    'user_id' => $this->getUserId(),
    'name'    => $this->getName()
);

没有任何操作符实际上会用这个替换原始文件。

而不是$set这些字段到一个新的值,你应该使用$set

$query = array('$set' => array(
    'user_id' => $this->getUserId(),
    'name'    => $this->getName() )
);

这应该会给你你想要的效果。

于 2013-02-14T12:32:27.400 回答
2

根据您的问题,我建议重新尝试“'created' => $this->getCreated() to the $query”,前提是您的模型定义了 created 属性,并且您的 getter 方法正在工作,那么这应该使用插入时的当前日期,以及更新时的预设属性值。

于 2013-02-14T13:07:57.717 回答