gpt4 book ai didi

php mongodb 只插入唯一值?

转载 作者:行者123 更新时间:2023-12-01 00:41:21 26 4
gpt4 key购买 nike

在 mysql 中,我可以为我的表列设置唯一性,这样如果该值已经存在,用户就不会插入相同的值,

CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`screen_name` varchar(255) DEFAULT NULL,
`user_name` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`secret` varchar(255) NOT NULL,
`salt` varchar(255) NOT NULL,
`signature` varchar(255) NOT NULL,
`visited_on` timestamp NOT NULL,
PRIMARY KEY (`user_id`,`person_id`,`category_id`),
UNIQUE KEY `user_name_UNIQUE` (`user_name`),
UNIQUE KEY `salt_UNIQUE` (`salt`),
UNIQUE KEY `signature_UNIQUE` (`signature`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

在 MongoDB 中呢?我怎样才能做到这一点?

$document = array(
"title" => "Mr",
"fullname" => "John C",
"username" => "user1",
"age" => 20
);
$collection->insert($document);

如果我再次运行,用户名为“user1”的用户会重复出现。使用 MySQL,它不会发生,我会得到一个错误。但是,如果“user1”已经存在,我如何让 Mongo 抛出错误?

最佳答案

您的 SQL 表声明还在“user_name”字段上声明了“唯一”索引。因此你想在 MongoDB 中做同样的事情,通过添加索引:

在 shell 中:

db.collection.createIndex({ "username": 1 },{ "unique": true })

或者在 PHP 代码中使用相同的 method :

$collection->createIndex(
array( "username", 1 ),
array( "unique", true )
)

然后,如果您尝试插入违反该约束的内容,那么您将收到一个异常。

如果您不想在每次插入操作时都收到异常,那么您可以使用 "upsert" MongoDB 的功能以及 $setOnInsert更新修饰符:

$document = array(
"title" => "Mr",
"fullname" => "John C",
"username" => "user1",
"age" => 20
);

$collection->update(
array("username", $document["username"]),
array('$setOnInsert',document),
array("upsert", true)
)

这只会在创建新文档时进行更改,而不会修改已存在的查询字段值。

使用“upserts”当然会带来“查找”集合中数据的成本,但也可以与您确实打算修改匹配文档的数据的操作相结合。

关于php mongodb 只插入唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31601542/

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