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


How to create an empty field if the field doesn't exist in MongoDB

我有一个为每个用户的一周每周(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); 
    }

听起来非常适合$setOnInsert

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

这样,update仅在更新插入需要执行插入(不存在的情况(时才设置值。

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