如何将MySQL语句SELECT FROM testing WHERE int_col + int_col2 > 123转为MongoDB查询?
解决MySQL到MongoDB的查询转换问题
没问题,我来帮你搞定这条SQL到MongoDB查询的转换!你的MySQL语句是要筛选出int_col和int_col2之和大于123的记录,在MongoDB里可以通过两种常用方式实现:
方法1:使用find()配合$expr
$expr允许你在查询条件中使用聚合表达式,这样就能对文档内的字段进行算术运算了,写法非常直观:
db.testing.find({ $expr: { $gt: [ // 大于判断逻辑 { $add: ["$int_col", "$int_col2"] }, // 计算两个字段的和 123 // 对比的阈值 ] } })
如果需要像SQL里的SELECT那样指定返回字段,可以添加投影参数(比如只返回int_col、int_col2,不返回默认的_id):
db.testing.find( { $expr: { $gt: [ { $add: ["$int_col", "$int_col2"] }, 123 ] } }, { int_col: 1, int_col2: 1, _id: 0 } )
方法2:使用聚合管道aggregate()
如果后续还需要对筛选后的结果进行其他操作(比如分组、排序、统计),用聚合管道会更灵活:
db.testing.aggregate([ { $match: { $expr: { $gt: [ { $add: ["$int_col", "$int_col2"] }, 123 ] } } } // 这里可以继续添加其他聚合阶段,比如$project、$sort、$group等 ])
小提示
$expr是MongoDB 3.6及以上版本支持的特性,如果你的MongoDB版本低于3.6,建议升级或者直接用聚合管道的方式(低版本聚合也支持类似的表达式判断)。- 字段名前面的
$是MongoDB中引用文档字段的语法,一定要加上,不然会被当成普通字符串处理哦。
内容的提问来源于stack exchange,提问作者Jenny N
相关产品推荐
相关产品推荐

