列表列表中的Spring Mongo标准

时间:2017-08-03 07:03:57

标签: java spring mongodb hibernate mongodb-query

您好我使用的是spring数据mongo,我需要根据多个where条件获取数据。当我想将where子句应用于列表中的列表时,我遇到的问题。

例如

{
    "_id" : ObjectId("5982bf9339f3c92b84be4737"),
    "_class" : "com.paladion.payment.model.GroupQuestionMapping",
    "saqID" : "SAQ A",
    "saqVersion" : "3",
    "questionTab" : {
        "Secure Network" : [ 
            {
                "number" : "2.1 (a)",
                "question" : "Are vendor-supplied"
        "description" : "<ul><li>Review"
        }, 
            {
                "number" : "2.1 (b)",
                "question" : "Are unnecessary"
        "description" : "<ul><li>Review policies 
        }
         ],
        "Access Control" : [ 
            {
                "number" : "2.1 (a)",
                "question" : "Are vendor-supplied"
        "description" : "<ul><li>Review"
        }, 
            {
                "number" : "2.1 (b)",
                "question" : "Are unnecessary"
        "description" : "<ul><li>Review policies 
        }
        ]
    }
}

在这里,我需要获取saqId为SAQ A且saq Version为3且questionTab为安全网络的数据。

我在questionTab上应用标准时遇到问题。

我的代码:

Query query = new Query();
query.addCriteria(Criteria.where("saqtype").is(saqType));
query.addCriteria(Criteria.where("saqversion").is(saqVersion));
query.addCriteria(/* criteria on questionTab */);

1 个答案:

答案 0 :(得分:0)

query.addCriteria(Criteria.where("questionTab.Secure Network").exists(true));

需要注意的是,它会根据标准为您提供完整的文档,因此您必须从文档中过滤掉其他类型的questionTab。

其他方式是聚合,但我认为在应用层上进行处理可能更合适。