我需要强制执行唯一约束上的嵌套文件,例如MongoDB的确保指数:嵌套重复实体
urlEntities: [
{ "url" : "http://t.co/ujBNNRWb0y" , "display_url" : "bit.ly/11JyiVp" , "expanded_url" :
"http://bit.ly/11JyiVp"} ,
{ "url" : "http://t.co/DeL6RiP8KR" , "display_url" : "ow.ly/i/2HC9x" ,
"expanded_url" : "http://ow.ly/i/2HC9x"}
]
URL,DISPLAY_URL和expaned_url需要是唯一的。如何在MongoDB中为这种情况发出ensureIndex命令?
另外,这样的嵌套文件是否是一个好的设计,或者我应该将它们移动到一个单独的集合,并从这里引用它们在urlEntities里面?我是MongoDB的新手,任何最佳实践建议都会非常有帮助。
全部场景:
说,如果我在其中有几百万个数据的数据库下面有一个文件:
{ “_id”:{ “$ OID”: “51f72afa3893686e0c406e19”}, “user”:“test”,“urlEntities”:[{“url”:“http://t.co/64HBcYmn9g”,“display_url”:“ow.ly/nqlkP”,“expanded_url”:“http://ow.ly/nqlkP”}],“count”:0}
当我得到另一个具有类似urlEntities对象的文档时,我只需要更新用户和计数字段。首先,我想对urlEntities字段执行唯一约束,然后处理异常,然后进行更新,否则,如果在插入前检查每个条目是否存在,它将对性能产生重大影响。那么,我该如何在urlEntities中强制执行唯一性呢?我试过
{"urlEntities.display_url":1,"urlEntities.expanded_url":1},{unique:true}
但仍然能够插入相同的文件两次没有例外。
此外,请建议任何更好的方法来处理这种情况。
谢谢。
你看了关于['$ addToSet'(http://docs.mongodb.org/manual/reference/operator/addToSet/)运营商? –
子文档索引:http://stackoverflow.com/questions/16769705/subdocument-index-in-mongo – WiredPrairie
好的设计?真的很难知道给出这么少的信息。有很多可能性 - 这取决于你需要的查询等。 – WiredPrairie