场景:

会员集合下有多个会员文档,会员文档下有多个订单文档,订单买了多个商品文档

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 二级数组嵌套查询的更多相关文章

  1. java~springboot~ibatis数组in查询的实现

    在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml ...

  2. [PHP] 使用PHP在mongodb中进行嵌套查询

    作为文档数据库,数据库中存储的数据是类似json的结构,比如{“modelInfo”:{"status":1,audited:"1"}},想要查询status是 ...

  3. 【MongoDB】数组长度查询

    db.groupedInfo.count({'surveyInfo.surveyAndUserID.0':{$exists:1}})

  4. MongoDB文档(二)--查询

    (一)查询文档 查询文档可以使用以下方法 # 以非结构化的方式显示所有的文档 db.<collectionName>.find(document) # 以结构化的方式显示所有文档 db.& ...

  5. java MongoDB查询(一)简单查询

    前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...

  6. elasticsearch elk最全java api 搜索 聚合、嵌套查询

    目录 一. 一般查询... 2 (一) matchAllQuery(client). 2 (二) matchQuery(client);3 (三) multiMatchQuery(client);3 ...

  7. C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑

    C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...

  8. java MongoDB查询(二)复杂查询

    前言 在上篇<java MongoDB查询(一)简单查询>中我们简单了解了下查询,但是仅仅有那些查询是不够用的,还需要复杂的查询,这篇就这点进行叙述. 1.数据结构 集合:firstCol ...

  9. 7. java操作MongoDB,采用_id查询

    转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...

随机推荐

  1. Mac下使用firefoxdriver

    Mac使用Firefox浏览器只需要设置WebDriver driver = new FirefoxDriver(),不需要安装firefoxdriver,前提是你的Firefox被安装在默认的位置. ...

  2. popen使用不当引起产生僵尸进程

    FILE * popen(const char * command, const char * type)popen函数会通过fork产生子进程,然后从子进程中调用/bin/sh -c执行参数comm ...

  3. JS总结 循环 退出循环 函数

    while循环 while(条件){条件成立就执行的代码} *一般条件变量需要递增,否则会进入死循环(无限循环),浏览器会崩溃甚至电脑死机 例如,逐行输出1-100的数字 var i = 1; whi ...

  4. firefox浏览器中silverlight无法输入问题

    firefox浏览器中silverlight无法输入问题 今天用firefox浏览silverlight网页,想在文本框中输入内容,却没想到silverlight插件意外崩溃了.google一下,发现 ...

  5. Freemarker工具类

    Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...

  6. 如何判断pc或者移动端

    <script type="text/javascript"> var userAgentInfo = navigator.userAgent; var Agents ...

  7. oracle 将多字段数据合成一个

    1.系统默认 WMSYS.WM_CONCAT(A.ID), 2.再进行替换 REPLACE(WMSYS.WM_CONCAT(A.ID),',','|'), (张)

  8. NSOperation实现线程间通信

    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1.创建队列 NSOperat ...

  9. IE7下如何判断复选框是否被选中(利用jquery)

    var checkM; $(".rate-mainL .checkM").click(function(){ var checkM=$("input[name='chec ...

  10. HTTP 响应头信息

    HTTP 响应头信息 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息. 在本章节中我们将具体来介绍HTTP响应头信息.