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

MongoDB如何对比同一文档两个字段查询,解决CastError类型报错

MongoDB同文档字段对比查询解决方案

错误原因

你原本的写法是普通匹配查询语法,MongoDB会将$usersMaxLen识别为普通字符串值尝试转换为数字和usersLen字段匹配,并不会将其解析为同文档的字段引用,因此触发类型转换报错。

正确写法

要实现同文档字段值的对比,需要用$expr运算符包裹比较逻辑,它支持在查询条件中使用聚合表达式,引用同文档字段做运算:

Credentials.findOne({
  $expr: {
    $lte: ['$usersLen', '$usersMaxLen']
  }
});

如果需要指定返回字段,类似你给出的SQL只查询指定字段的效果,可以加第二个投影参数:

// 仅返回usersLen、usersMaxLen字段,关闭默认返回的_id
Credentials.findOne(
  {
    $expr: { $lte: ['$usersLen', '$usersMaxLen'] }
  },
  { usersLen: 1, usersMaxLen: 1, _id: 0 }
);

对应SQL示例的通用写法

你提到的SQL SELECT name,surname FROM users where name=surname 对应的MongoDB查询写法如下:

db.users.find(
  { $expr: { $eq: ['$name', '$surname'] } },
  { name: 1, surname: 1, _id: 0 }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:04