您可以插入多条具有相似信息的记录,因为您没有为这些值中的任何一个指定唯一索引。默认唯一索引将打开_id
。
您可以使用MongoCollection.ensureIndex从 PHP 定义您自己的索引,例如:
// create a unique index on 'phonenum'
$collection->ensureIndex(array('phonenum' => 1), array("unique" => true));
还值得阅读有关唯一索引的 MongoDB 文档,因为如果正在为可能已经有重复值或空值的现有集合创建唯一索引,则需要注意一些警告。
_id
如果要使用更自然的主键,您还可以选择提供自己的值。但是,您必须确保这_id
对于新插入是唯一的。
MongoDB 创建的默认ObjectID被设计为在分配时具有相当高的唯一性。
代码示例:
<?php
// Connect to MongoDB server
$mongo = new Mongo();
// Use database 'mydb' and collection 'mycoll'
$collection = $mongo->mydb->mycoll;
// Drop this collection for TESTING PURPOSES ONLY
$collection->drop();
// The document details to insert
$document = array(
'asda' => 12312,
'cxzcxz' => 'czczcxz',
);
try {
$collection->insert($document, array("safe" => true));
// Note that $collection->insert() adds the _id of the document inserted
echo "Saved with _id:", $document['_id'], "\n";
}
catch (MongoCursorException $e) {
echo "Error: " . $e->getMessage()."\n";
}
// Add unique index for field 'asda'
$collection->ensureIndex(array('asda' => 1), array("unique" => true));
// Try to insert the same document again
$document = array(
'asda' => 12312,
'cxzcxz' => 'czczcxz',
);
try {
$collection->insert($document, array("safe" => true));
echo "Saved with _id:", $document['_id'], "\n";
}
catch (MongoCursorException $e) {
echo "Error: " . $e->getMessage()."\n";
}
?>