如果MongoDB中不存在该字段,如何创建一个空字段

时间:2013-10-12 09:02:30

标签: php mongodb nosql

我有一个文档是在每个用户的一周的弱基础(field delimeter保持日期)上创建的。 每次用户会话到期时,我都会检查用户是否有该特定周的文档(以便所有更新都不会失败)

我正在尝试避免2次抓取:1)抓取以检查文档是否存在,2)创建另一个创建或不创建该文档的查询,具体取决于它是否已存在

我想知道mongo内是否有这样的功能...如果不存在则创建否则什么也不做?

目前,upsert inserts如果不存在,或updates,如果存在的话。因此,不是一个有效的解决方案。我需要if ( !exist){ update/insert ) else { do nothing }

public function createUserSocialWallForUser( MongoId $userMongoID, $delimeter ) {
        $db = $this->db()->socialWall;

        $where = array( 'userId' =>  $userMongoID, 
                        'delimeter' => $delimeter
                      );
        $data = array(  'userId' =>  $userMongoID, 'delimeter' => $delimeter, 'event' => array() );
        $option = array ('upsert' => true);
        $db->update( $where, $data, $option); 
    }

1 个答案:

答案 0 :(得分:0)

听起来非常适合$setOnInsert

$data = array(
    '$setOnInsert' => array(
        'userId' =>  $userMongoID, 
        'delimeter' => $delimeter, 
        'event' => array()
    )
);

这样update只在upsert需要插入时才设置值(不存在的情况)。

请注意,这至少需要MongoDB的v2.4。