场景:

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

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

  

相关文章:

  • 2021-10-25
  • 2022-12-23
  • 2022-12-23
  • 2021-08-09
  • 2021-04-28
  • 2021-09-04
猜你喜欢
  • 2021-08-27
  • 2022-12-23
  • 2021-11-09
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-12-17
相关资源
相似解决方案