在 MongoDB 中插入之前应该编写什么查询来检查约束?
What query should be written to check constraint before insertion in MongoDB?
我知道 MongoDB 不是 SQL 数据库,因此它不像 MySQL 或其他 SQL RDBMS 那样灵活。
但是我们可以通过两种方式在mongoDB中应用外键:-
- 使用嵌入式文档
- 使用字段作为参考
这里我有两个集合,一个是CUSTOMER(Parent),另一个是ACCOUNT(Child)。
**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, "CID" : 1 },
{ "_id" : 4, "BALANCE" : 20000, "CID" : 2 },
{ "_id" : 5, "BALANCE" : 52000, "CID" : 3 },
{ "_id" : 6, "BALANCE" : 27000, "CID" : 7 }
这里我把CID当作一个外键引用,但是正如我们在最后一个条目中看到的,我们输入的是CID = 7。但是很明显,CUSTOMER Collection中没有CID=7。
我的问题是如何防止插入不在客户集合中的其他 CID 值。
这意味着它应该只插入那些也存在于 CUSTOMER 中的 CID,否则它应该显示 ERROR !!
我应该写什么查询,以便它在插入文档之前检查父级中是否存在数据?
对于 noSQL 数据库,数据的完整性留给了开发人员。因此,您可能需要在创建或更新帐户之前手动检查客户 table 中是否存在客户 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;
- 网站上还有更多内容。
更新:所以也许您可以在代码中找到一些 ORM 或类似的东西来完成它。 I found this 如果您正在使用 PHP。
我知道 MongoDB 不是 SQL 数据库,因此它不像 MySQL 或其他 SQL RDBMS 那样灵活。
但是我们可以通过两种方式在mongoDB中应用外键:-
- 使用嵌入式文档
- 使用字段作为参考
这里我有两个集合,一个是CUSTOMER(Parent),另一个是ACCOUNT(Child)。
**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, "CID" : 1 },
{ "_id" : 4, "BALANCE" : 20000, "CID" : 2 },
{ "_id" : 5, "BALANCE" : 52000, "CID" : 3 },
{ "_id" : 6, "BALANCE" : 27000, "CID" : 7 }
这里我把CID当作一个外键引用,但是正如我们在最后一个条目中看到的,我们输入的是CID = 7。但是很明显,CUSTOMER Collection中没有CID=7。
我的问题是如何防止插入不在客户集合中的其他 CID 值。
这意味着它应该只插入那些也存在于 CUSTOMER 中的 CID,否则它应该显示 ERROR !!
我应该写什么查询,以便它在插入文档之前检查父级中是否存在数据?
对于 noSQL 数据库,数据的完整性留给了开发人员。因此,您可能需要在创建或更新帐户之前手动检查客户 table 中是否存在客户 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;
- 网站上还有更多内容。
更新:所以也许您可以在代码中找到一些 ORM 或类似的东西来完成它。 I found this 如果您正在使用 PHP。