如何解决在插入 MongoDB 之前应该编写什么查询来检查约束?
我知道 MongoDB 是 Nosql 数据库,因此它不像 MysqL 或其他 sql RDBMS 那样具有灵活性。
但是我们可以通过两种方式在 mongoDB 中应用外键:-
- 使用嵌入式文档
- 使用字段作为参考
这里我有两个集合,一个是 CUSTOMER(父),另一个是 ACCOUNT(子)。
**CUSTOMER**
db.createCollection("CUSTOMER",{
validator:{
$jsonSchema:{
bsonType:"object",required:["CID","CNAME"],properties:{
CID:{bsonType:"number"},CNAME:{bsonType:"string"}
}
}}});
{ "CID" : 1,"CNAME" : "Rock" }
{ "CID" : 2,"CNAME" : "Joe" }
{ "CID" : 3,"CNAME" : "James" }
**ACCOUNT** (2nd Collection)
db.createCollection("ACCOUNT",{
validator:{
$jsonSchema:{
bsonType:"object",required:["BALANCE","CID"],properties:{
BALANCE:{bsonType:"double"},CID:{bsonType:"number"}
}
}}});
{ "_id" : 1,"BALANCE" : 20500,"CID" : 1 },{ "_id" : 2,"BALANCE" : 10000,"CID" : 2 },{ "_id" : 3,"BALANCE" : 15000,{ "_id" : 4,"BALANCE" : 20000,{ "_id" : 5,"BALANCE" : 52000,"CID" : 3 },{ "_id" : 6,"BALANCE" : 27000,"CID" : 7 }
这里我将 CID 视为外键引用,但正如我们在最后一个条目中看到的,我们输入的是 CID = 7。但很明显,CUSTOMER Collection 中没有 CID=7。
我的问题是如何防止插入不在 CUSTOMER Collection 中的其他 CID 值。
这意味着它应该只插入那些也存在于 CUSTOMER 中的 CID,否则它应该显示 ERROR !!
我应该写什么查询,以便在插入文档之前检查父项中数据是否存在?
解决方法
对于 noSQL 数据库,数据的完整性留给开发人员。因此,您可能需要在创建或更新帐户之前手动检查客户表中是否存在客户 ID。
,有一些关于不同情况的模式的文档。如果那能帮到你。但是,确实,我认为 Ali Hussam 是对的。
- Model One-to-One Relationships with Embedded Documents ;
- Model One-to-Many Relationships with Embedded Documents ;
- Model One-to-Many Relationships with Document References ;
- 网站上还有更多内容。
UPDATE :所以也许你可以在代码中找到一些 ORM 或类似的东西。 I found this 如果您使用的是 PHP。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。