如何检查MongoDB中是否已添加文档

时间:2012-11-19 00:44:43

标签: php mongodb

我有一些网址。

在添加新网址时,我想检查它们是否已经添加,如果不是这样的话,请添加它。(网址是唯一的)

 $db->url->find(array('url' => $linkurlcache));
 $db->url->insert(array('url' => $linkurlcache));

这是我尝试过的(非常糟糕)

$var = $db->url->find(array('url' => $linkurlcache))->limit(1);
foreach($var as $var1){if($var1['url'] == $linkurlcache){$j = 0;}else{$j = 1;}}
        if($j == 0){
            $db->url->insert(array('url' => $linkurlcache));
        }else{
                echo "exists";
        }

我正在从MySQL迁移(使用MySqlDb类):

$Db->where('url', $linkurlcache);
if($results = $Db->get('tbl_url')){echo "exists";}else{

        $insertData = array('url' => $linkurlcache);
        if ($Db->insert('tbl_url', $insertData)){echo "added";} 
        echo $linkurlcache;

};  

我在他们的文档上(在MongoDB.org和PHP.net上)也在堆栈溢出上查看,但我找不到解决方案。

您可以帮助我解决方案或智能解决方法。

2 个答案:

答案 0 :(得分:2)

除了JohnnyHK关于使用findOne()检查文档是否存在的建议之外,还有一些其他选项,具体取决于您的文档结构:

1)如果您的urls每个文档存储一个,请使用upsert,如果网址不存在则会插入;如果存在,则会更新现有文档。

2)如果您的urls存储在文档中的数组中,请使用$addToSet,只有在数组中不存在该值时才会追加该文件。

答案 1 :(得分:0)

使用findOne代替更简洁:

$var = $db->url->findOne(array('url' => $linkurlcache));
if ($var == NULL) {
    $db->url->insert(array('url' => $linkurlcache));
}else{
    echo "exists";
}