2016-10-07 3 views
0

関係収集のためにMongoDBで、削除制限する方法を私たちは、たとえば考えることができたモデルの下

Companies {Name: string, Address:string} 

Employees {FirstName: string, 
      lastName:String, 
      Company: {type:mongoose.schema.objectID,ref:companies} 
} 

は「前」のミドルウェアを使用せずに、データベースレベルで従業員レコードを持っている企業の削除を制限する必要があります。

私は、MySQLのリレーションシップ制約 - 削除制限に似ている解決策を探しています。

+0

http://stackoverflow.com/questions/8195190/how-to-enforce-foreign-keys-in-nosql-databases-mongodbここを見てください。 –

答えて

3

我々は使用してこれを行うことができます$nin

db.companies.find(); 

{"_id":1, "name":"ABC Pvt Ltd", "Address":"Chennai, India"} 
{"_id":2, "name":"XYZ Pvt Ltd", "Address":"Mumbai, India"} 
{"_id":3, "name":"LMN Pvt Ltd", "Address":"Delhi, India"} 

従業員のコレクション内の 会社の属性が企業の文書IDを指し、私たちは3つのレコードを持つ従業員にコレクションを持ってみましょう私たちは3つのレコードを

と会社のコレクションを持ってみましょうコレクションには、会社1と2の従業員があります。

db.employees.find(); 

{"_id":1, "firstname":"X", "lastname":"Y", "company":1} 
{"_id":2, "firstname":"A", "lastname":"B", "company":1} 
{"_id":2, "firstname":"Z", "lastname":"A", "company":2} 

rem従業員のいない会社を育てるには、まず従業員を持つ会社を探す必要があります。複数のエントリを回避するために、私たちは今、私たちは今、私たちは検索クエリを実行した場合、従業員に

db.companies.remove({"_id":{$nin : db.employees.distinct("company")}}); 

を持っていない企業を削除するために従業員を擁しています明確な企業と$ニンを使用しているdistinct

db.employees.distinct("company") 
[ 1, 2 ] 

を使ってみましょう企業のコレクションでは2つのレコードしか得られません。それは従業員

はそれが役に立てば幸いを持っていないので

db.companies.find(); 
{ "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" } 
{ "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" } 

会社3が削除されます!

関連する問題