微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在插入 MongoDB 之前应该编写什么查询来检查约束?

我知道 MongoDB 是 Nosql 数据库,因此它不像 MysqL 或其他 sql RDBMS 那样具有灵活性。

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

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

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

UPDATE :所以也许你可以在代码中找到一些 ORM 或类似的东西。 I found this 如果您使用的是 PHP。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。