java 数组 mongodb_java mongoDB 二级数组嵌套查询

这篇博客介绍了如何使用MongoDB的查询语句和Java代码来验证会员是否购买了特定的商品。通过示例数据,展示了查询结构,包括会员、订单和订单中的商品文档。查询涉及到$elemMatch操作符,确保找到匹配的订单项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

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

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值