mongodb同一个document中两个字段比较查询

原文地址: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");

猜你喜欢

转载自blog.csdn.net/yu757371316/article/details/81317315