Mongoid:获取缺少至少一类文档的用户

问题描述 投票:0回答:0

我在 ORM 中使用 Ruby On Rails 和 Mongoid。

我有一个

User
班和一个
Document
班。用户有_很多文件。文档有一个类别。 有多个类别,但其中一些是强制性的。

我想检索在强制类别之一中缺少文档的所有用户,或者根本没有文档的用户。到目前为止,这是我对聚合所做的尝试,但这不起作用:

def self.without_all_required_documents
  subquery = Document.collection.aggregate([
    { "$match" => { "user_id" => { "$ne" => nil }, "category" => { "$in" => required_categories } } },
    { "$group" => { "_id" => "$user_id", "categories" => { "$addToSet" => "$category" } } },
    { "$project" => { "_id" => 1, "missing_categories" => { "$setDifference" => [required_categories, "$categories"] } } },
    { "$match" => { "missing_categories" => { "$ne" => [] } } },
    { "$project" => { "_id" => 1 } }
  ])

  where(
    :"$or" => [
      { :id.in => subquery.map { |doc| doc["_id"] } },
      { :"$and" => required_categories.map { |cat| { :"documents.category" => cat } } },
      { :"$expr" => { :"$eq" => [{ :"$size" => { :"$ifNull" => ["$documents", []] } }, 0] } }
    ]
  )
end
ruby-on-rails ruby mongodb activerecord mongoid
© www.soinside.com 2019 - 2024. All rights reserved.