java mongoDB 二级数组嵌套查询
2016-11-17 19:50
190 查看
场景:
会员集合下有多个会员文档,会员文档下有多个订单文档,订单买了多个商品文档
member->orders>orderItems
要求:
通过会员id和商品id验证会员是否购买过该商品。
数据示例
mongodb语句:
java代码:
会员集合下有多个会员文档,会员文档下有多个订单文档,订单买了多个商品文档
member->orders>orderItems
要求:
通过会员id和商品id验证会员是否购买过该商品。
数据示例
{ "_id" : ObjectId("57e395c7a8a9b40d62008704"), "orders" : [ { "_id" : ObjectId("582d5633c8ddd70b75a7a050"), "paid" : true, "status" : "PAID", "orderItems" : [ { "ID" : ObjectId("582d5633c8ddd70b75a7a051"), "requestId" : "582d5633c8ddd70b75a7a04f", "price" : "4", "ultimatePrice" : "4", "quantity" : NumberInt("1") } ] } ] }
mongodb语句:
db.getCollection("f.member").find({_id:ObjectId("memberId……"),"orders.paid":true,"orders":{"$elemMatch":{"orderItems":{"$elemMatch" :{"ID":ObjectId("itemId……")}}}}},{"orders.$.orderItems":1})
java代码:
BasicDBObject itemIdDbObject=new BasicDBObject("ID",itemId); BasicDBObject itemsIdElem=new BasicDBObject().append(QueryOperators.ELEM_MATCH,itemIdDbObject); BasicDBObject orderItemsElem=new BasicDBObject().append("orderItems",itemsIdElem); BasicDBObject orderElem=new BasicDBObject().append(QueryOperators.ELEM_MATCH,orderItemsElem); BasicDBObject fiedValue=new BasicDBObject(); fiedValue.put("_id",memberId); fiedValue.put("orders.paid",true); fiedValue.append("orders",orderElem); BasicDBObject retrievedFields=new BasicDBObject("orders.$",1); System.out.println(fiedValue.toJson()); DBCursor rs = this.getCollection().find(fiedValue); DBObject explain = rs.explain(); int count = rs.count();
相关文章推荐
- mongoDB javaAPi 添加嵌套数组数据 更新
- 【MongoDB】Java驱动读写数组
- java Mongodb 查询数组
- 二级java程序设计--继承,多态,高级类特性和数组
- Java Spring 删除mongodb数组内置文档
- MongoDB 第三周作业――用java操作MongoDB之删除数组中的元素
- mongodb Java数组
- java数组的处理(过滤元素)
- 操纵java数组
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- 如何封装查询记录到Java对象数组
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java数据结构---基于数组的表
- java语言数组笔记
- Java数组学习心得
- 学习java中的数组:打印n*n矩阵的螺旋方形和回字形
- hibernate二级缓存攻略 Ehcache(from javaEyes)
- Java数组学习心得,欢迎拍砖
- 操纵java数组[珍藏]
- 操纵java数组[转]