【mongoDB】Java中使用条件操作符进行查询
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,查询时经常会用到$in之类的操作符,比如db.collection_0.find("_id":{"$in","0001","0002","0003"})。但是shell归shell,java里应该怎么
千家信息网最后更新 2026年11月01日【mongoDB】Java中使用条件操作符进行查询
查询时经常会用到$in之类的操作符,比如db.collection_0.find("_id":{"$in","0001","0002","0003"})。
但是shell归shell,java里应该怎么写,在这就拿$in作为例子。
PS:我喜欢$in,尤其key是一个array类型的时候。
我用的是mongo-java-driver 2.11.0
现在我有个collection叫col_0,然后我在里面存了这么写东西。
假设这是_id为0001的用户有0002和0003两个好友。
现在我想查询一个用户的好友的好友,就像"推荐好友"那样的东西。
Java代码的话,大概可以这样写:
DB db = MonFactory.getInstance().getMongo().getDB("test"); DBCollection dbCollection = db.getCollection("col_0"); BasicDBObject term = new BasicDBObject(); term.put("_id", uid); DBObject curUserData = dbCollection.findOne(term); List p4pList = new ArrayList(); p4pList.addAll((Collection extends String>) curUserData.get("pals")); DBObject result; term = new BasicDBObject("_id", new BasicDBObject("$in", p4pList)); DBCursor cursor = dbCollection.find(term); while (cursor.hasNext()) { if ((result = cursor.next()) != null) { System.out.println(result.get("pals")); } }
使用的BasicDBObject的构造函数是这样定义的:
/** * creates an object with the given key/value * @param key key under which to store * @param value value to stor */public BasicDBObject(String key, Object value){ super(key, value);}
也就是说我把$in当作key来使用了。
按shell的语法来说貌似是那么回事,但我总觉得这种写法不够OO。
于是我用QueryBuilder这样写:
DB db = MonFactory.getInstance().getMongo().getDB("test"); DBCollection dbCollection = db.getCollection("col_0"); DBObject term = new BasicDBObject(); term.put("_id", uid); DBObject curUserData = dbCollection.findOne(term); List p4pList = new ArrayList(); p4pList.addAll((Collection extends String>) curUserData.get("pals")); DBObject result;// term = new BasicDBObject("_id", new BasicDBObject("$in", p4pList)); term = QueryBuilder.start().and("id").in(p4pList).get(); DBCursor cursor = dbCollection.find(term); while (cursor.hasNext()) { if ((result = cursor.next()) != null) { System.out.println(result.get("pals")); } }
有时候感觉OO真是自寻烦恼。
无论如何,条件操作符了这样就可以用了。
但我可能对对象关系映射之类的东西习惯了,所以我决定用Morphia什么的。
于是:
Mongo mongo = new MongoClient("localhost", 27017); DataStore store = new DataStore(mongo, "test"); Query query = store.createQuery(Person.class); query.criteria("_id").equals(uid); query = store.createQuery(Person.class); query.criteria("_id").in(Arrays.asList(query.get().getPals())); for (Iterator itr = store.createQuery(Person.class) .iterator(); itr.hasNext();) { System.out.println(itr.next().getPals()); }
好友
东西
操作符
查询
用户
条件
无论如何
自寻烦恼
不够
两个
也就是
也就是说
代码
例子
写法
函数
回事
对象
常会
感觉
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重庆互联网络科技
金融科技 互联网金融
互联网未来科技
卓越科技(互联网 )
百单互联网科技有限公司
上海喔噻互联网科技
互联网科技大会案例
科技赋能互联网健康
天速互联网络科技有限公司
恒银科技与互联网金融
随着互联网科技发展
贵州叶脉互联网科技有限公司所属行业
华夏恒生科技与互联网科技
深圳艾果互联网通讯科技
卓翼科技产业互联网合作
广州富喜互联网络科技
江苏互联网智能科技软件
萌小萌互联网科技河南有限公司
互联网公司属于科技吗
现代互联网科技公司
互联网和科技技术
厦门中拓互联网络科技有限公司
科技互联网公司装修
兼蜜互联网科技
互联网科技论坛
互联网科技革命什么开始
晓花互联网科技有限公司网址
青海科技产业互联网发展
易企秀互联网科技是做什么的
宁波允成互联网科技有限公司