目前我运行的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 ,两者都证明不成功。是否有一些明显的我做错了导致我想要单独删除的字段?
答案 0 :(得分:2)
这是因为您的$query
值。这是一个常见的初学者错误。
将整个查询文档放入更新中,如下所示:
$query = array(
'user_id' => $this->getUserId(),
'name' => $this->getName()
);
没有任何操作符实际上将使用此文件替换原始文档。
而是将这些字段$set
改为新值,您应该使用$set
:
$query = array('$set' => array(
'user_id' => $this->getUserId(),
'name' => $this->getName() )
);
这应该会给你你想要的效果。
答案 1 :(得分:2)
根据您的问题,我建议重新尝试“'created'=> $ this-> getCreated()到$ query”,前提是您的模型已定义了已创建的属性,并且您的getter方法正在运行,那么这应该使用插入的当前日期和更新时的预设属性值。