java mongoDB 二级数组嵌套查询
场景:
会员集合下有多个会员文档,会员文档下有多个订单文档,订单买了多个商品文档
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();
java mongoDB 二级数组嵌套查询的更多相关文章
- java~springboot~ibatis数组in查询的实现
在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml ...
- [PHP] 使用PHP在mongodb中进行嵌套查询
作为文档数据库,数据库中存储的数据是类似json的结构,比如{“modelInfo”:{"status":1,audited:"1"}},想要查询status是 ...
- 【MongoDB】数组长度查询
db.groupedInfo.count({'surveyInfo.surveyAndUserID.0':{$exists:1}})
- MongoDB文档(二)--查询
(一)查询文档 查询文档可以使用以下方法 # 以非结构化的方式显示所有的文档 db.<collectionName>.find(document) # 以结构化的方式显示所有文档 db.& ...
- java MongoDB查询(一)简单查询
前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...
- elasticsearch elk最全java api 搜索 聚合、嵌套查询
目录 一. 一般查询... 2 (一) matchAllQuery(client). 2 (二) matchQuery(client);3 (三) multiMatchQuery(client);3 ...
- C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑
C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...
- java MongoDB查询(二)复杂查询
前言 在上篇<java MongoDB查询(一)简单查询>中我们简单了解了下查询,但是仅仅有那些查询是不够用的,还需要复杂的查询,这篇就这点进行叙述. 1.数据结构 集合:firstCol ...
- 7. java操作MongoDB,采用_id查询
转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...
随机推荐
- Mac下使用firefoxdriver
Mac使用Firefox浏览器只需要设置WebDriver driver = new FirefoxDriver(),不需要安装firefoxdriver,前提是你的Firefox被安装在默认的位置. ...
- popen使用不当引起产生僵尸进程
FILE * popen(const char * command, const char * type)popen函数会通过fork产生子进程,然后从子进程中调用/bin/sh -c执行参数comm ...
- JS总结 循环 退出循环 函数
while循环 while(条件){条件成立就执行的代码} *一般条件变量需要递增,否则会进入死循环(无限循环),浏览器会崩溃甚至电脑死机 例如,逐行输出1-100的数字 var i = 1; whi ...
- firefox浏览器中silverlight无法输入问题
firefox浏览器中silverlight无法输入问题 今天用firefox浏览silverlight网页,想在文本框中输入内容,却没想到silverlight插件意外崩溃了.google一下,发现 ...
- Freemarker工具类
Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...
- 如何判断pc或者移动端
<script type="text/javascript"> var userAgentInfo = navigator.userAgent; var Agents ...
- oracle 将多字段数据合成一个
1.系统默认 WMSYS.WM_CONCAT(A.ID), 2.再进行替换 REPLACE(WMSYS.WM_CONCAT(A.ID),',','|'), (张)
- NSOperation实现线程间通信
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1.创建队列 NSOperat ...
- IE7下如何判断复选框是否被选中(利用jquery)
var checkM; $(".rate-mainL .checkM").click(function(){ var checkM=$("input[name='chec ...
- HTTP 响应头信息
HTTP 响应头信息 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息. 在本章节中我们将具体来介绍HTTP响应头信息.