{
"_id":"1",
"company":"ABCD",
"Address":{
"Location":"XYZ"
},
"empName":[{
"ID":1,
"Name":"test1"
},
"ID":2,
"Name":"test2"
},
"ID":3,
"Name":"test3"
}]
}
am using mongoTemplate query,
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);
but my result as below with other fields displayed null.
{
"_id":"1",
"company":null,
"Address":null,
"empName":[{
"ID":1,
"Name":"test1"
}]
}
my expected result should be like this,
"_id":"1",
"company":"ABCD",
"Address":{
"Location":"XYZ"
},
"empName":[{
"ID":1,
"Name":"test1"
}]
Can you please help me to fix this issue.
Thanks in advance,
Do Read the documentation for Criteria and BasicQuery.
The second argument in this
BasicQuery basicQuery = new BasicQuery(findCriteria1.getCriteriaObject(), find2Criteria.getCriteriaObject());
is basically a projection. i.e. you are telling the driver to fetch only the fields mentioned in those. Hence other fields are not fetched and hence null.
If you want to fetch all fields this is what you should do in your case
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());
You can use below code.
You can chain the fields you require in the Field
class.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With