【mongoDB】Java中使用条件操作符进行查询
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,查询时经常会用到$in之类的操作符,比如db.collection_0.find("_id":{"$in","0001","0002","0003"})。但是shell归shell,java里应该怎么
千家信息网最后更新 2024年11月30日【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); Listp4pList = 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); Listp4pList = 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"); Queryquery = 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安全错误
数据库的锁怎样保障安全
计算机网络技术上机题型
网络安全厂商产品组合地图
北京耗材阳光采购数据库没有信息
配置与管理web服务器实验
什么是网络技术工程师
查看所有的数据库mysql
智联互联网络技术
绍兴越淘网络技术怎么样
云服务器回收站在那里
芯片测试上位机与服务器交互
河北回收服务器cpu
系统服务器的不同端口
微信软件开发方案
数据库运动会e r图
福州龙腾网络技术
数据库 业务主键
数据库安全讲解
搜索数据库语句
视频会员扫号器 加数据库
勤哲服务器表单被其他人打开
有哪些大学有软件开发
保定博睿恩软件开发
软件开发需要导师指导什么
网络安全ap是什么
db2链接远程数据库
网络安全由我做主
软件开发专业对数学的要求
设备软件开发要学什么条件
软件开发甲方和乙方的区别
前端怎么知道服务器下的文件