【问题标题】:Mongoid Query Embedded Document Return Wrong RecordMongoid查询嵌入文档返回错误记录
【发布时间】:2019-12-05 14:27:33
【问题描述】:

我有两个型号Core::UserCore::UserMeta

class Core::User
   include Mongoid::Document

   embeds_many :core_user_meta, class_name: 'Core::UserMeta'
end
class Core::UserMeta
   include Mongoid::Document

   field :meta_key, type: String
   field :meta_value

   embedded_in :core_user, class_name: 'Core::User'
end

我对@9​​87654326@ 上的查询Core::UserMeta 使用了两个条件,如下所示:

Core::User.where('core_user_meta.meta_key': 'roles', 'core_user_meta.meta_value': 'member').first

我想获得一条记录,在meta_key 中具有"roles" 的条件meta_value 中的["member"] 但结果总是,看起来我使用的是or 子句而不是and子句

#<Core::User _id: BSON::ObjectId('5b961b07eea19009d397cfaf'), core_user_meta: [{"_id"=>BSON::ObjectId('5b961b07eea19009d397cfb0'), "meta_key"=>"nickname", "meta_value"=>"member"}, {"_id"=>BSON::ObjectId('5b961b07eea19009d397cfbb'), "meta_key"=>"roles", "meta_value"=>["subscriber"]}]> 

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    您所写的查询是:

    给我一​​个用户,该用户的 meta_key 为“roles”,并且 meta_value 为“member”。

    这个查询满足一个有两个元的用户对象,每个元满足一个条件。

    要将这两个条件强加于同一个元数据,请使用 $elemMatch:

    Core::User.where('core_user_meta'=>{'$elemMatch'=>{'meta_key': 'roles', 'meta_value': 'member'}}).first
    

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2011-04-26
      • 2021-12-07
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多