我想在MongoDB数据库中的字段上创建一个唯一索引。我知道我可以通过我的应用程序强制执行它,但我也想在MongoDB数据库上强制执行它!
我正在查看以下文档:
https://docs.mongodb.org/manual/tutorial/create-an-index/
我没有得到的是谁在运行以下代码?
db.records.createIndex( { userid: 1 } )
在这种情况下,db对象是什么?是否有我可以考虑的初始化脚本,以便我可以预先填充我的集合(如果它们不存在),如果它们不存在则应用索引?有什么建议吗?
答案 0 :(得分:1)
在您的应用程序中强制执行唯一键约束是不切实际的 - 只需开始考虑如何执行此操作...
您正在阅读的文章显示了mongo shell命令。安装mongo后,打开shell,键入mongo
,您将看到mongo提示符。这是一个完整的JavaScript执行环境(基于V8),所以你可以在这里做任何你可以在javascript中做的任何事情。
命令的db
部分是指您当前使用的mongo数据库。当您启动mongo shell时,您将自动连接到测试数据库。当您在shell中use records
时,您正在更改数据库。
通常,我发现编写我推送到mongo shell的脚本更容易:在shell中重放多行命令很繁琐。这是你的例子。
// Example collection initialization script
// USE:
// mongo < thisFile
// connect to mongo test database
use test
// create a unique index on records
// will create collection if it does not already exist
db.records.createIndex({userId:1}, {unique:true})
// insert some test data
db.records.insert({userId:1, name:'bob'})
db.records.insert({userId:2, name:'nancy'})
// unique does not mean the field must exist in the inserted doc
db.records.insert({name:'no userId is OK'})
// but there can be only one doc without a userId
db.records.insert({name:'ohhh nooo'})
// display indexes
db.records.getIndexes()
// drop the collection so we can test the initialization script
//db.records.drop()