2017-08-21 3 views
0

コレクションから関連するエンティティを削除する必要があります。 例えば、私はM:N関係を持っています:複数のユーザーを持つプロジェクトです(ユーザーは複数のプロジェクトを持つことができます)。Mongoid - M:Nコレクションからエンティティを削除しますが、削除しません。

ユーザーをプロジェクトから削除できますが、削除しないでください。

# this removes user from project, but also deletes user 
project.users.find(id: user._id).remove 

おかげ

答えて

1

は、我々はバンドを持っているし、それが複数のタグを持っているとしましょう:

band = Band.all[1] 
=> #<Band _id: 599d2c8a9d1fa2c5498024cc, name: "test_band", tag_ids: [BSON::ObjectId('599d2c8a9d1fa2c5498024cd'), BSON::ObjectId('599d2c8a9d1fa2c5498024ce'), BSON::ObjectId('599d2c8a9d1fa2c5498024cf')]> 

その後、我々は、関連するタグオブジェクトの1つを削除しようとします

band.tags.delete(Tag.find(id: '599d2c8a9d1fa2c5498024cd') 
... 
MONGODB | localhost:27017 | test_development.update | SUCCEEDED | 0.000634s 
=> #<Tag _id: 599d2c8a9d1fa2c5498024cd, name: "test_tag1", band_ids: []> 

それをband.tagsアレイから削除されます:

irb(main):088:0> band 
=> #<Band _id: 599d2c8a9d1fa2c5498024cc, name: "test", tag_ids: [BSON::ObjectId('599d2c8a9d1fa2c5498024ce'), BSON::ObjectId('599d2c8a9d1fa2c5498024cf')]> 

しかし、オブジェクトとしてまだ存在そのタグ:

Tag.find(id: '599d2c8a9d1fa2c5498024cd') 
=> #<Tag _id: 599d2c8a9d1fa2c5498024cd, name: "test_tag1", band_ids: []> 
+0

が、私は 'project_id'属性を持っていません。私は 'project_ids'という配列を持っています。これは、コレクション全体ではなく、ただ一つの項目を削除したいので、' nil'に設定することはできません。 –

+0

'project.users.delete(user._id)'のように、その配列から要素を削除すればどうなるでしょうか? – iskvmk

+0

いいえ、削除するとドキュメントが削除されます。 –

関連する問題