分类专栏: mongodb

 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

使用Mongodb查询需要拼接复杂的or和and参数
MongoDb有表格:
1
"state1" : 11,
"state2" : 21,
"value" : 100
2
"state1" : 11,
"state2" : 22,
"value" : 300
3
"state1" : 11,
"state2" : 22,
"value" : 200
4
"state1" : 12,
"state2" : 21,
"value" : 300
 
要实现管理数据的如下SQL形式:
关系数据库:select * from where(state1=11 and state2=22) or value >300
首先使用MongoDB的方式查询:
分为以下几个步骤实现:
步骤一:实现 (state1=11 and state2=22)
db.getCollection('testOrAnd').find(
{$and:[{"state1":11},{"state2":22}]}
)
步骤二:使用or形式实现 value >300
db.getCollection('testOrAnd'). find(
{ $or:[{"value":{$gte:300}}] }
)
步骤三:将步骤一参数拼接到步骤二or条件
db.getCollection('testOrAnd').
find({$or:
[
{$and:[{"state1":11},{"state2":22}]},{"value":{$gte:300}}
]
})
 
最终实现结果:
 
使用spring-mongotemplate的方式查询(Criteria.where是静态方法):
分析查询方式,类似使用client的分析方式,分为以下几个步骤实现:
步骤一:实现 (state1=11 and state2=22)
query.addCriteria(
new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
)
);
步骤二:使用or形式实现 value >300
query.addCriteria(
new Criteria().orOperator(
Criteria.where("value").gte(300)
)
);
步骤三:将步骤一参数拼接到步骤二or条件
query.addCriteria(
new Criteria().orOperator(
Criteria.where("value").gte(300),
new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
)
)
);
 
升级查询,实际场景中要根据传输的参数是否为空,拼接查询条件:
(1)如果最外层是and关系(query.add多个creterria默认为and关系)
if(条件){
query.addCriteria(Criteria.where);
}
if(条件){
query.addCriteria(Criteria.where);
}
if(条件){
query.addCriteria(Criteria.where);
}
默认拼接的query条件为and形式。
(1)如果最外层是or关系(目前只想到此笨方法)
//1.拼接参数
Criteria operator1=null;
Criteria operator2=null;
if(1==1){//模拟判断条件
operator1 = new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
);
}
if(1==1){//模拟判断条件
operator2 = Criteria.where("value").gte(300);
}
//2.判断参数
if(operator1!=null && operator2!=null){
query.addCriteria(new Criteria().orOperator(operator1,operator2));
}else if(operator1!=null){
query.addCriteria(operator1);
}else if(operator2!=null){
query.addCriteria(operator2);
}
 
补充:多个条件直接查询,默认是and形式
db.getCollection('testOrAnd').find({"state1":11,"state2":22})
即query.add多个creterria默认为and关系
 
 

mongodb复杂条件查询 (or与and)的更多相关文章

  1. 【Mongodb教程 第十九课 】PHP与MONGODB的条件查询

    与普通的关系型数据库类似,在对数据的删.改.查的时候,会用到查询条件,如mysql中的 where… 而MongoDB中,经过php来做的所有的操作指令都是用array来包裹的: MongoColle ...

  2. mongodb多条件查询总结

    根据两字段乘积过滤查询分页数据 db.cron.aggregate([{$project:{_id:,AppID:,result:{$add:["$endlottery",&quo ...

  3. MongoDBTemplate多条件查询的问题

    问题: 在使用Spring Data MongoDB 进行条件查询数据时,发现条件判断不起作用,结果会返回所有的数据. Criteria criteria = new Criteria(); crit ...

  4. MongoDB 多条件组合查询

    组合条件查询json格式语法 { "$and": [ { "Date": { $gt: ISODate("2015-06-05T00:45:00.00 ...

  5. MongoDB 组合多个条件查询($and、$in、$gte、$lte)

    一,问题描述 数据格式: id, timeStamp,count 条件1:查询 某个时间段 内的数据: timeStamp BETWEEN startTime AND endTime.比如 timeS ...

  6. MongoDB入门---文档查询操作之条件查询&and查询&or查询

    经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...

  7. mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例

    1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...

  8. mongodb多条件分页查询的三种方法(转)

    一.使用limit和skip进行分页查询 public List<User> pageList(int pageNum ,int pageSize){ List<User> u ...

  9. java 实现mongoDB 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)

    首先idea创建一手springboot项目 引入如下依赖 <dependency> <groupId>org.mongodb</groupId> <arti ...

随机推荐

  1. C#比较两个对象中的指定字段值是否相等

    一.创建CompareFieldAttribute标识要比较的字段 using System; namespace CompareObjField { /// <summary> /// ...

  2. Python爬取十四万条书籍信息告诉你哪本网络小说更好看

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TM0831 PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. C#中巧用Lambda进行数据的筛选查询等处理

    场景 有一个Record对象的list,如果要根据其某个属性CycleIndex进行分组,类似于sql的group by分组查询. 如果要在这个这个list中查找出符合某种条件的数据,类似于sql的w ...

  4. 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了

    你是否为WiFi共享而发愁,各个无线共享软件,某某共享精灵,某某免费WiFi,某某共享大师,某某随身WiFi,一个比一个难用,一个比一个私货多,一个比一个广告多,如果装上了它们,你的电脑就基本沦陷了, ...

  5. curl http libcurl 功能使用

    /* * This example shows a HTTP PUT operation. PUTs a file given as a command * line argument to the ...

  6. xamarin Android 监听音量键(上)

    public override bool OnKeyDown([GeneratedEnum]Android.Views.Keycode keyCode, KeyEvent e) { switch (k ...

  7. python中集合

    去重 无序 没有索引 #remove 删除元素 >>> s1 = {1,2,3,4,5} >>> s1.remove(2) >>> print(s ...

  8. logstash收集系统日志配置

    查看官方文档 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html 找个路径 /home/data/log ...

  9. [20190523]修改参数后一些细节注意2.txt

    [20190523]修改参数后一些细节注意2.txt --//上午想模拟链接遇到的情况,链接http://blog.itpub.net/267265/viewspace-2645262/--//就是修 ...

  10. 使用JAVAScript技术在WEB网页实现摇一摇的应用

    实现效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...