在 MongoDB 中插入之前应该编写什么查询来检查约束?

What query should be written to check constraint before insertion in MongoDB?

我知道 MongoDB 不是 SQL 数据库,因此它不像 MySQL 或其他 SQL RDBMS 那样灵活。

但是我们可以通过两种方式在mongoDB中应用外键:-

  1. 使用嵌入式文档
  2. 使用字段作为参考

这里我有两个集合,一个是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 确实是对的。

更新:所以也许您可以在代码中找到一些 ORM 或类似的东西来完成它。 I found this 如果您正在使用 PHP。