欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
mongodb同一个document中两个字段比较查询

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");
相关标签: Mongodb