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. 
    } 
} 

Это первый получает каждый уникальный адрес электронной почты, то для каждого из них дает все записи грузоотправителю с пустыми номерами телефонов.

Примечание: не проверено, могут быть ошибки.

Смежные вопросы