如何向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规范,并确保选项字典中的所有键均为符号。
错误原因
store_in方法仅支持:database、:collection、:client三个参数,无法直接通过collection_options配置时间序列- 创建数据的语句存在语法错误:
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
相关产品推荐
相关产品推荐

