在spring mongodb查询中指定字段投影

问题描述 投票:3回答:2
{
    "_id":"1",
    "company":"ABCD",
    "Address":{
    "Location":"XYZ"
    },
    "empName":[{
    "ID":1,
    "Name":"test1"
    },
    "ID":2,
    "Name":"test2"
    },
    "ID":3,
    "Name":"test3"
    }]
}

我正在使用mongoTemplate查询,

Criteria findCriteria1 = Criteria.where("_id").is("1");
Criteria find2Criteria = Criteria.where("empName").elemMatch(Criteria.where("ID").is(1));
BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject(), find2Criteria.getCriteriaObject());
mongoTemplate.findOne(basicQuery, ClassName.class);

但我的结果如下所示,其他字段显示为null。

{
    "_id":"1",
    "company":null,
    "Address":null,
    "empName":[{
    "ID":1,
    "Name":"test1"
    }]
}

我的预期结果应该是这样的,

"_id":"1",
"company":"ABCD",
"Address":{
"Location":"XYZ"
},
"empName":[{
"ID":1,
"Name":"test1"
}]

你能帮我解决这个问题吗?

提前致谢,

json spring spring-data-mongodb mongotemplate
2个回答
1
投票

您可以使用以下代码。

您可以在Field类中链接所需的字段。

Criteria criteria = Criteria.where("_id").is("1");
Query query = new Query(criteria);
query.fields().elemMatch("empName", Criteria.where("ID").is(1)).include("company");
mongoTemplate.findOne(query , ClassName.class);

0
投票

请阅读CriteriaBasicQuery的文档。

这是第二个论点

BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject(), find2Criteria.getCriteriaObject());  

基本上是一个投影。即你告诉司机只提取那些提到的字段。因此,不提取其他字段,因此为空。

如果你想获取所有字段,这就是你应该做的事情

    Criteria findCriteria1 = Criteria.where("_id").is("1");  
    Criteria find2Criteria = Criteria.where("empName").elemMatch(Criteria.where("ID").is(1));  
    BasicQuery basicQuery = new BasicQuery(findCriteria1.andOperator(find2Criteria).getCriteriaObject());
© www.soinside.com 2019 - 2024. All rights reserved.