在mongo / mongoid中选择具有一些非唯一属性的文档

时间:2014-11-13 19:44:54

标签: ruby mongodb mongoid database

我有一个名为Shippers的集合,这些文档都有电子邮件地址。每个实体也有一个电话号码。

在某些情况下,我的收藏中的多个文档具有相同的电子邮件地址,但只有部分文档具有指定的电话号码。我想选择包含与其他文档相同的电子邮件地址的文档,但是DONT指定了电话号码。我想象的是这样的事情:

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

我知道我可以通过执行this.attribute1 = this.attribute2来比较事物,但这只是将同一文档与自身进行比较。我想将一个文档上的电子邮件与我的集合中的所有其他文档进行比较,如上所述。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用group_by?例如,

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

答案 1 :(得分: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.
  }
}

首先获取每个唯一的电子邮件地址,然后为每个电子邮件地址提供包含空电话号码的所有托运人记录。

注意:未经测试,可能有错误。