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

Spring Boot+MongoDB:不使用$where实现同文档两字段比较

替代MongoDB $where比较同文档字段的方案

因为启用--noscripting后无法使用服务器端JavaScript,你可以用以下几种不依赖$where的方法实现同文档两个字段的比较:

1. 使用$expr查询过滤器(MongoDB 3.6+)

$expr允许在查询过滤器中使用聚合表达式,直接引用当前文档的字段进行比较,完全不需要JS。

原生MongoDB Shell写法:

db.yourCollection.find({ $expr: { $ne: ["$a1", "$a2"] } })

Spring Data MongoDB对应写法:

如果你用的是Spring Data的Criteria,可以这样写:

// 方式1:直接构造expr
Criteria criteria = Criteria.where("").expr(new Document("$ne", Arrays.asList("$a1", "$a2")));
Query query = new Query(criteria);
List<YourEntity> results = mongoTemplate.find(query, YourEntity.class);

// 方式2:使用AggregationExpression
AggregationExpression compareFields = context -> new Document("$ne", Arrays.asList("$a1", "$a2"));
Criteria criteria = Criteria.where("").expr(compareFields);

2. 使用聚合管道的$match阶段

如果需要结合其他聚合操作,也可以在聚合管道里用$match配合$expr实现:

db.yourCollection.aggregate([
  { $match: { $expr: { $ne: ["$a1", "$a2"] } } },
  // 后续可以添加其他聚合阶段,比如$project、$group等
])

这些方法都完全规避了服务器端JavaScript的使用,适配--noscripting的环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:04