这会每次都创造新的系列吗?

时间:2014-04-16 11:16:36

标签: php mongodb

我已经编写了这段代码,我是mongodb的新手,每次调用页面时都会创建新的集合。如果是,那我该如何防止这种情况呢?

<?php

error_reporting(1);
ini_set('display_errors', 1);

//connect
$m = new MongoClient();
$db = $m->selectDB('test');

echo '<pre>';

//check connect
if($db){
    echo 'yeah connection done check </br>';
}else{
    echo 'nop';
    die;
}


//create table or collection
    $log = $db->createCollection("test_16042014",array());

    if($log){

//insert into
        $log->insert(array("name" => "sagar",
                            "email" => "test@gmail.com",
                            "date_time" => new MongoDate()
                            )
                    );
    }else{
        echo 'nop';
        die;
    }

2 个答案:

答案 0 :(得分:2)

createCollection方法的MongoDB文档中所述:此命令显式创建集合

  

此方法主要用于创建新的上限集合。   这也用于为普通集合预先分配空间。

如果您调用此方法两次,或者如果您尝试创建已存在的集合,则会出现错误(“集合已存在”)。

  

MongoDB中的集合是在集合时隐式创建的   在命令中引用。

这意味着如果您尝试将文档插入到尚不存在的集合中,MongoDB将为您创建一个集合。

在您的示例中,您可以安全地删除该命令,只需使用insert方法创建一个新集合。

答案 1 :(得分:1)

你只需要检查集合是否存在我在简短的谷歌之后发现了这段代码。您需要使用它在create + insert周围放置一个if子句,以便只有在该集合尚不存在时才会插入。

public function collection_exists($collection){

    if ($this->db->system->namespaces->findOne(array('name'=>'eI_db.'.$collection)) === null){
        return false;
    }
    return true;

}

其中$ this-&gt; db是当前引用的数据库。您可能需要调整它以便使用您的设置进行测试。

还有一些mongo包装器库可能对你有用http://code.google.com/p/mongodb-morph/