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
相关产品推荐
相关产品推荐

