【问题标题】:Find a record in Mongod without ID在MongoDB中查找一条没有ID的记录
【发布时间】:2019-09-20 09:49:13
【问题描述】:

当我运行这个查询时(在 rails 控制台中):

Analytic.where(:created_at.gte => start_date, :created_at.lte => end_date).only(:user_uuid).as_json

默认情况下,响应也返回“_id”。我想使用查询从响应中跳过那个“_id”。

当我检查哈希时,我得到了这个:

#<Mongoid::Criteria
  selector: {"created_at"=>{"$gte"=>2018-06-27 06:00:00 UTC, "$lte"=>2018-06-28 05:59:59 UTC}}
  options:  {:fields=>{"_id"=>1, "user_uuid"=>1}}
  class:    Analytic
  embedded: false>

这表明它也在要求“_id”。

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid


    【解决方案1】:

    试试:

    Analytic
      .where(
        :created_at.gte => start_date,
        :created_at.lte => end_date
      ).pluck(
        :user_uuid
      ).as_json
    

    编辑:

    这应该可以解决问题:

    Analytic
      .where(
        :created_at.gte => start_date,
        :created_at.lte => end_date
      ).pluck(
        :user_uuid
      ).map {
        |uuid| {
          "user_uuid" => uuid
        }
      }
    

    或者更易读:

    Analytic.where(:created_at.gte => start_date, :created_at.lte => end_date).pluck(:user_uuid).map { |id| { "user_uuid" => id } }
    

    【讨论】:

    • Pluck 不返回密钥。我想要类似 [{"user_uuid" : "hhj23"}, {"user_uuid" : "kjk23j3k4jk23"}]
    • 仍然...返回的类型将是 Array of Hashes 而不是 Array of Analytics。并不是说它是错误的,只是为了让@SachinPrasad 意识到这一点。
    【解决方案2】:

    试试这个:

    Analytic.select(:user_uuid).where(:created_at.gte => start_date, :created_at.lte => end_date).as_json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多