mongo 데이터베이스와 여러 컬렉션이 있습니다. 나는 target_id와 일치하는 모든 엔트리를 콜렉션에서 제거하고 싶다. 트릭은 target_id와 일치하는 항목에 "연결된"항목을 제거해야한다는 것입니다. 이제 MongoDB의 쿼리 결과에 대한 쿼리
DB
Culture (_id, owner_id)
Document (_id, target_id)
Entity (_id, target_id)
Field (_id, entity_id)
Form (_id, target_id)
Question (_id, form_id)
Layout (_id, question_id)
예를
를 들어, 내가 easilily 그래서
db.Document.remove({"_id": ObjectId(target_id)});
최초의 까다로운 부분에서 모든 문서를 제거 할 수 있습니다, 문화 컬렉션에서 일부 항목이 owner_id = document_ID 아를 가질 수 있다는 것입니다. 그래서 엔터티 항목을 제거하기 전에 문화 항목을 제거해야합니다.
두 번째 문제는 해당 필드가 entity_id에서 찾을 수 있기 때문에 필드 컬렉션의 target_id 항목으로 직접 액세스 할 수 없다는 것입니다.
target_id를 제공하는 mongo 쉘에서 실행 한 다음 target_id에 의해 "직접 참조되거나"간접적으로 모든 항목을 제거하는 스크립트/쿼리를 작성하고 싶습니다. id에 의해 단순한 find/delete 경험이 없었기 때문에이 쿼리는 막혔다.
는 지금까지 내가 단계로이 단계를 수행 할 수 이해, 말하자면, 먼저 엔티티를 찾을 수 :
db.Entity.find({ "$where" : "{"target_id" : ObjectId(target_id)}" });
두 번째 단계는 쿼리에서 각 개체의 = 개체 ID를 OWNER_ID 모든 문화를 제거하는 것입니다 위. 어떻게하면 되나요?
db.Culture.find({ "$where" : "{"owner_id" : ObjectId(entity_id)}" });
여기서 entity_id는 첫 번째 쿼리를 모두 반복합니다.
데이터가 관계형 인 것처럼 보입니다 ... mongo는 이러한 종류의 물건 대신 좋은 대안이 아닙니다. – tanaydin