2014-11-13 2 views
0

Shippers라는 콜렉션이 있으며이 문서에는 이메일 주소가 있습니다. 각 엔티티에는 전화 번호도 있습니다.mongo/mongoid에서 고유하지 않은 속성이있는 문서를 선택하십시오.

내 컬렉션의 여러 문서가 동일한 이메일 주소를 가지고 있지만 일부에만 지정된 전화 번호가있는 시나리오가 있습니다. 다른 전자 문서와 동일한 전자 메일 주소를 포함하는 문서를 선택하려고하지만 DONT에는 지정된 전화 번호가 있습니다.

Shipper.where('this.phone_number = nil AND this.email = Shipper.email') 

은 내가 this.attribute1 = this.attribute2을 수행하여 일을 비교할 수 있습니다 알고 있지만 이것은 단지 자체에 같은 문서를 비교 : 이런 식으로 뭔가 내가 상상한다. 위와 같이 한 문서의 전자 메일을 내 컬렉션의 다른 모든 문서와 비교하려고합니다.

답변

0

group_by을 사용해 보셨나요? 예를 들어,

Shipper.where(phone_number: nil).group_by(&:email)

+0

이메일이 다른 문서의 이메일과 동일한 경우 문서를 선택하고 싶습니다. 이 또한 조건을 충족시키지 못하는 문서를 반환하지 않습니까? – Macmee

0

은 당신이 뭔가를 할 수 있습니다 :

Shipper.distinct(:email).each { |email_address| 
    Shipper.where(:phone_number => nil).where(:email => email_address).each { |shipper| 
    # do whatever you want with shipper document. 
    } 
} 

첫 번째는, 각각의 고유 이메일 주소를 얻을 다음 그 각각에 대해 당신에게 하늘의 전화 번호가 모든 선적 기록을 제공합니다.

참고 : 테스트를 거치지 않았으므로 실수를 할 수 있습니다.