0

URLのコレクションがあります。

新しいURLを追加するとき、それらがすでに追加されているかどうかを確認したいのですが、そうでない場合は追加します。(URLは一意です)

 $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)でもstackoverflowを調べましたが、解決策が見つかりません。

それで、あなたは私に解決策、または賢い回避策を手伝ってくれませんか。

4

2 に答える 2

2

ドキュメントが存在するかどうかを確認するために使用する JohnnyHK の提案に加えてfindOne()、ドキュメント構造に応じていくつかのオプションがあります。

1)urlsドキュメントごとに 1 つ保存されているupsert場合は、URL が存在しない場合は挿入するか、存在する場合は既存のドキュメントを更新する を使用します。

2)urlsドキュメント内の配列に格納されている$addToSet場合、値が配列にまだ存在しない場合にのみ追加する which を使用します。

于 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 に答える