mongodb同一个document中两个字段比较查询
程序员文章站
2022-07-13 14:52:45
...
原文地址:https://blog.csdn.net/a13793024985/article/details/79663269
db.ct_work.aggregate([
{$project:{crtTm:1,stuNum: 1,subNum: 1,cmpTo: { $cmp: [ "$subNum", {$multiply:["$stuNum",0.5]} ] },_id: 1}} ,
{ $match : {crtTm:{$gt:ISODate("2018-03-12T13:30:00.000Z"),$lt:ISODate("2018-03-18T17:00:00.000Z")} }},
{$group:{_id:"$cmpTo",total: { $sum: 1 }}}
])
前比后大:1
前后相等:0
前小于后:-1
2.这种方式更好:
db.ct_work.aggregate(
[
{ $match : {crtTm:{$gt:ISODate("2018-03-12T13:30:00.000Z"),$lt:ISODate("2018-03-18T17:00:00.000Z")} }},
{
$redact: {
"$cond": [{
"$gte": ["$subNum", {$multiply:["$stuNum",0.5]}]
},
"$$KEEP", "$$PRUNE"
]
}
}
]
).count()
直接出来一个数字
第三种方式:
db.ct_work.find(
{"$where":"this.subNum >= this.stuNum * 0.5",
"fnhSta":1 ,
crtTm:{$gt:ISODate("2018-03-19T00:00:00.000Z"),$lt:ISODate("2018-03-25T23:59:59.000Z")}
}).count()
mongoTemplate写法:
Criteria criteria = new Criteria() {
@Override
public DBObject getCriteriaObject() {
DBObject obj = new BasicDBObject();
obj.put("$where", "this.subNum >= this.stuNum * 0.5");
return obj;
}
};
Query query = new Query();
query.addCriteria(criteria)
.addCriteria(Criteria.where("fnhSta").is(1)
.andOperator(Criteria.where("crtTm").lt(c2.getTime()),Criteria.where("crtTm").gt(c.getTime())));
long result = mongoTemplate.count(query,"collectionName");