2013-10-12 65 views
0

我有一个弱基础(field delimeter保留日期)为每个用户的星期创建的文档。 每当用户会话过期时,我会检查以查看用户是否拥有该特定周的文档(以便所有更新都不会失败)如何创建一个空字段,如果该字段不存在于MongoDB中

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

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

目前,upsertinserts如果它不存在或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); 
    } 

回答

0

听起来像一个完美契合$setOnInsert

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

这样,update只有在UPSERT需要做插入(在未存在的情况下)设置值。

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

相关问题