【mongoDB】Java中使用条件操作符进行查询
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,查询时经常会用到$in之类的操作符,比如db.collection_0.find("_id":{"$in","0001","0002","0003"})。但是shell归shell,java里应该怎么
千家信息网最后更新 2025年11月07日【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安全错误
数据库的锁怎样保障安全
数据库的增删改查java语句
电脑网络安全模式能联网怎么办
我的世界里服务器地址
伊宁互联网科技有限公司
软件开发创造的价值
服务器怎么在地狱找残骸
中石化网络安全防控体系建设思路
软件开发需求规格书格式
服务器网卡聚合联想sr650
闵行区信息化软件开发有哪些
数据库最新开源
电脑上的客户端登陆不了服务器
综述文献检索数据库
虚拟机游戏服务器数据怎么清除
上海楽客网络技术有限公司
西安app软件开发报价单
数据库物理存储结构表现为什么的
网络安全大赛是什么意思
数据库技术入门书籍
数据库中数据什么样子
初中没计算机软件开发
戴尔服务器安装win7
国家网络安全宣传公益广告
数据库技术支持工程师发展
径河国家网络安全基地作用
卡迪夫贝尔法斯特网络安全
学术论文写作数据库
数据库技术基础
如何打开盛世服务器
数据库中为什么需要使用索引