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

Rails中使用Mongoid查询MongoDB数组匹配无结果问题求助

解决Mongoid查询返回空数组的问题

嘿,我之前也碰到过一模一样的问题,核心原因基本都是ID类型不匹配——你从MySQL拿到的是整数ID数组,但MongoDB里AdminInfo的id字段类型和它对不上,自然查不到结果。下面一步步帮你排查和解决:

1. 先确认MongoDB中AdminInfo的ID类型

先打开Rails控制台,执行这条命令看看文档的ID格式:

AdminInfo.first.inspect

重点看输出里的id字段:是类似BSON::ObjectId('60d21b4667d0d8992e610c85')的默认ObjectId类型,还是像1、4这样的整数?


2. 根据ID类型调整查询逻辑

情况1:Mongo中的ID是ObjectId类型

如果AdminInfo用的是Mongoid默认的ObjectId,那要么是你创建文档时没把MySQL的AdminItems整数ID和Mongo的ID对应上,要么是你把AdminItems的ID存成了字符串格式的ObjectId。如果确认两者ID是对应的,把整数数组转成字符串数组再查询就行:

# 把整数ID转成字符串类型
@info_strings = @info.map(&:to_s)
@admininfo = AdminInfo.where(id: @info_strings).as_json

情况2:Mongo中的ID是整数类型

如果你在AdminInfo模型里自定义了整数类型的ID(比如设置了field :id, type: Integer),那可能是查询时的类型匹配细节问题。试试这两种方式:

# 显式确保ID为整数类型(虽然@info已经是整数,但可以再确认下)
@admininfo = AdminInfo.where(id: @info.map(&:to_i)).as_json

# 或者用遍历查询的方式,自动过滤掉不存在的ID结果
@admininfo = @info.map { |id| AdminInfo.find_by(id: id) }.compact.as_json

3. 再排查几个小细节

  • 直接去MongoDB shell里验证:执行db.admin_infos.find({id: 1})(把1换成@info里的某个ID),确认集合里确实有对应文档。
  • 检查AdminInfo模型的集合配置:比如有没有写错集合名称(比如store_in collection: 'admin_info'但实际集合是admin_infos)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:39