MongoDb在Java中比较同一集合中的两个字段

时间:2019-07-30 11:03:31

标签: java spring mongodb mongodb-query bson

如何使用Mongo-DB Java驱动程序比较同一集合中的两个字段?我需要分批提取数据,然后在正确过滤后对其进行处理。下面是我尝试过的那种代码。

MongoCollection<Document> collection = getCollection();
FindIterable<Document> documents = collection.find(
    or(
       lt(field1, 0),
       gt(field2, field3)
    )
)
.projection(Projections.fields(Projections.include(field1)))
    .sort(Sorts.ascending(field1))
    .batchSize(1000).noCursorTimeout(true);

documents.forEach((Block<Document>) document ->{
 // remaining code
}


//Mongo Query

db.example.find( { $or:[{"field1":{$lt:0}}, {"field2":{$gt:"$field3"}}]});

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决您的问题
首先,您可以使用$where进行此操作

 db.ct_work.find(
{ $or:[{"field1":{$lt:0}},
    {"$where":"this.field2 >= this.field3"}]}) 

## in java  you  do with  Filters.where  or  create  a  DBObject

Filters.where("this.a > this.b") 

DBObject obj = new BasicDBObject();
obj.put("$where", "this.subNum >= this.stuNum");

第二步,您可以使用$expr

## like 
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )

您还可以与$redact$cond的聚合一起使用

$match:{},
 $redact: {
                "$cond": [{
                        "$gt": ["$firstfield", "$secondfiled"}]
                    },
                     "$$KEEP", "$$PRUNE"
                ]
            }

这可能对您有帮助!