您的位置:首页 > 数据库 > Mongodb

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

2018-03-23 09:52 3555 查看
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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐