You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向MongoDB写入数据?Mongoid store_in配置报错求助

解决Mongoid时间序列模型写入MongoDB的报错问题

问题场景

我尝试用以下代码创建Ecg数据:

ecg = Ecg.create(:collection, options: { timestamp: Time.now,, voltage: -1.3, metadata: { user_id: 1}})

对应的Ecg模型定义:

class Ecg
  include Mongoid::Document
  include Mongoid::Timestamps
  field :voltage, type: Float
  field :timestamp, type: Time
  belongs_to :user

  store_in collection_options: {
    time_series: {
      timeField: "timestamp",
      metaField: "metadata",
      granularity: "milliseconds"
    }
  }
end

运行后触发报错:

Invalid options passed to Ecg.store_in: {:collection_options=>{:time_series=>{:timeField=>"timestamp", :metaField=>"metadata", :granularity=>"milliseconds"}}}.
summary: :store_in宏仅接受包含:database、:collection或:client键的参数字典。
resolution: 修改传递给store_in的选项使其符合文档化的API规范,并确保选项字典中的所有键均为符号。

错误原因

  1. store_in方法仅支持:database、:collection、:client三个参数,无法直接通过collection_options配置时间序列
  2. 创建数据的语句存在语法错误:Time.now,,多了一个冗余逗号;且create方法不需要传入:collection参数

修复方案

1. 修正Ecg模型的时间序列配置

Mongoid中配置MongoDB时间序列集合,需通过collection方法指定选项,替代错误的store_in用法:

class Ecg
  include Mongoid::Document
  include Mongoid::Timestamps
  field :voltage, type: Float
  field :timestamp, type: Time
  belongs_to :user

  # 正确配置MongoDB时间序列集合
  collection(
    time_series: {
      timeField: "timestamp",
      metaField: "metadata",
      granularity: "milliseconds"
    }
  )
end

2. 修正数据创建语句

移除冗余逗号和不必要的:collection参数:

ecg = Ecg.create(timestamp: Time.now, voltage: -1.3, metadata: { user_id: 1})

验证说明

修正后,模型会正确映射到MongoDB的时间序列集合,执行创建语句即可成功写入数据。metadata字段会被识别为时间序列元数据字段,timestamp作为时间字段,完全符合MongoDB时间序列的配置要求。

内容的提问来源于stack exchange,提问作者Dwarknight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:36