【问题标题】:Select documents with some non unique attribute in mongo / mongoid在 mongo / mongoid 中选择具有一些非唯一属性的文档
【发布时间】:2014-11-13 19:44:53
【问题描述】:

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

在某些情况下,我的集合中的多个文档具有相同的电子邮件地址,但只有一些具有指定的电话号码。我想选择包含与其他文档相同的电子邮件地址但没有指定电话号码的文档。我想像这样的事情:

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

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

【问题讨论】:

    标签: ruby mongodb mongoid database


    【解决方案1】:

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

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

    【讨论】:

    • 如果他们的电子邮件与另一个文档的电子邮件相同,我想选择文档。这不会也返回不符合此条件的文件吗?
    【解决方案2】:

    你可以这样做:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多