0

我有一组网址。

添加新网址时,我想检查它们是否已添加,如果不是,则添加它。(网址是唯一的)

 $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;

};  

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

所以你能帮我一个解决方案,或者一个聪明的解决方法。

4

2 回答 2

2

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

1)如果urls每个文档存储一个,请使用upsert,如果 url 不存在则插入,如果存在则更新现有文档。

2)如果您urls存储在文档中的数组中$addToSet,则仅在数组中不存在该值时才使用它。

于 2012-11-19T01:13:17.437 回答
0

使用它会更清洁findOne

$var = $db->url->findOne(array('url' => $linkurlcache));
if ($var == NULL) {
    $db->url->insert(array('url' => $linkurlcache));
}else{
    echo "exists";
}
于 2012-11-19T00:59:20.180 回答