在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抛出错误呢?已经存在?
答案 0 :(得分:4)
您的SQL表声明还声明" unique" " user_name"的索引领域。因此,您希望在MongoDB中添加索引:
在shell中:
db.collection.createIndex({ "username": 1 },{ "unique": true })
或者在具有相同method:
的PHP代码中$collection->createIndex(
array( "username", 1 ),
array( "unique", true )
)
然后,如果您尝试插入违反该约束的内容,则会收到异常。
如果您希望在每次插入操作时都不会收到异常,那么您可以使用MongoDB的"upsert"功能以及$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"当然会带来"查找"集合中的数据,但也可以与您打算修改文档匹配的数据的操作结合使用。
答案 1 :(得分:1)
来自mongodb doc
http://docs.mongodb.org/manual/tutorial/create-a-unique-index/
创建唯一索引¶
MongoDB允许您为索引指定唯一约束。这些约束阻止应用程序插入具有插入字段重复值的文档。
如果集合中已包含违反索引唯一约束的数据,则MongoDB无法在指定的索引字段上创建唯一索引。
单个字段上的唯一索引
要创建唯一索引,请考虑以下原型:
db.collection.createIndex( { a: 1 }, { unique: true } )