我需要对嵌套文档强制执行唯一约束,例如:
网址实体:[ { “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
需要是唯一的。如何ensureIndex
在 MongoDB 中针对这种情况发出命令?
此外,拥有这样的嵌套文档是一个好的设计,还是我应该将它们移动到一个单独的集合并从这里引用它们urlEntities?
我是 MongoDB 的新手,任何最佳实践建议都会很有帮助。
完整场景:
假设我在包含数百万数据的数据库中有如下文档:
{“_id”:{“$oid”:“51f72afa3893686e0c406e19”},“用户”:“测试”,“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}
但是我仍然可以毫无例外地两次插入同一个文档。