我已经编写了这段代码,我是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;
}
答案 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/