假设我有一些文档集合,例如:
{ "_id" : 0 , "owner":0 "name":"Doc1"},{ "_id" : 1 , "owner":1, "name":"Doc1"}, etc
而另一方面,业主被表示为一个单独的集合:
{ "_id" : 0 , "username":"John"}, { "_id" : 1 , "username":"Sam"}
如何在插入文档时确保以正确的方式引用用户.在旧式RDBMS中,可以使用外键轻松完成.
我知道我可以从我的业务代码中检查插入的正确性,但是如果攻击者篡改我对服务器的请求并将"所有者":100放入,那么Mongo不会抛出任何异常.
我想知道如何在真实的单词应用程序中处理这种情况.
先感谢您!
MongoDB没有外键(正如你可能已经注意到的那样).因此,基本上答案是"不要让用户篡改请求.只允许应用程序插入遵循参照完整性规则的数据."
MongoDB在很多方面都很棒......但是如果你发现你需要外键,那么它可能不是你问题的正确解决方案.
回答您的具体问题 - 当MongoDB鼓励在客户端处理外键关系时,他们也提供"数据库引用"的想法 - 请参阅此帮助页面.
也就是说,我不建议使用DBRef.让您的客户端代码管理关联或(更好)从一开始就将文档链接在一起.您可能需要考虑在所有者对象本身内嵌入所有者的"文档".组装您的文档以符合您的使用模式,MongoDB将大放异彩.