gpt4 book ai didi

php - MongoDB:集合中的重复文档

转载 作者:行者123 更新时间:2023-12-04 18:17:43 24 4
gpt4 key购买 nike

我是 mongodb 的新手,找不到解决方案。

我正在使用 mongo-php-driver

我刚刚创建了一些集合。
我想从 PHP 代码创建一些文档。

$collection->create(array(
'asda'=>12312,
'cxzcxz'=>'czczcxz'
));

当该代码起作用时,集合中有两条相同的记录,但_id不同。
{ "_id" : ObjectId("4ff4b3b8859183d41700000f"), "asda" : 12312, "cxzcxz" : "czczcxz" }
{ "_id" : ObjectId("4ff4b3b8859183d417000010"), "asda" : 12312, "cxzcxz" : "czczcxz" }

如何修复它,以及我需要在此处更改哪些内容才能只有一个文档?

我在表中有 _id 索引。也许我每次都需要设置这个键?当我设置 _id 字段时,它在集合中保存了一条记录。但是如何让它自动(如自动增量)?

最佳答案

您可以插入多条具有相似信息的记录,因为您没有为这些值中的任何一个指定唯一索引。 default unique index将在 _id .

您可以使用 MongoCollection.ensureIndex 从 PHP 中定义自己的索引。例如:

// create a unique index on 'phonenum'
$collection->ensureIndex(array('phonenum' => 1), array("unique" => true));

也值得阅读 unique indexes 上的 MongoDB 文档。因为如果正在为可能已经具有重复值或空值的现有集合创建唯一索引,则需要注意一些警告。

您还可以选择提供自己的 _id如果有更自然的主键要使用,则值。您必须确保此 _id但是,对于新插入来说是独一无二的。

默认 ObjectID由 MongoDB 创建的设计目的是在分配时具有相当高的唯一性。

代码示例:
<?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";
}

?>

关于php - MongoDB:集合中的重复文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com