Вы можете использовать это Агрегирование
db.collection.aggregate([
{ $unwind: '$contents' },
{ $match: { "locale": "en-us",
"domain": "bingo.com", "contents.contentName": "Template_2"} },
{ $unwind: '$contents.fields' },
{ $match: { 'contents.fields.title' : "Company Name" } },
{ $group: { _id: '$_id',
fields: { $push: { title: '$contents.fields.title'}},
"locale" : {$first: "$locale"},
"domain" : {$first: "$domain"},
"pageName" : {$first: "$pageName"},
'contentName': {$first: '$contents.contentName'}
}
},
{ $group: { _id: '$_id',
"locale" : {$first: "$locale"},
"domain" : {$first: "$domain"},
"pageName" : {$first: "$pageName"},
contents: { $push: { "contentName": '$contentName', "fields": '$fields' }},
}}
])
Или просто примените это. Мои извинения Если я ошибся в синтаксисе, но стараюсь изо всех сил, чтобы сделать их правильными
Aggregation aggregation = newAggregation(
unwind("contents),
match(
where("$domain").is(domain)
.and("$contents.contentName").is(templateName)
.and("$locale").in(criteria.getLocales())
),
unwind("$contents.fields"),
match(where("$contents.fields.title").is(title)),
group("_id")
.push("$contents.fields.title").as("fields")
.push("$locale").as("locale")
.push("$domain").as("domain")
.push("$pageName").as("pageName")
.push("$contents.contentName").as("contentName"),
group("_id")
.push("locale").as("locale")
.push("domain").as("domain")
.push("pageName").as("pageName")
.push(new BasicDBObject
("contentName", "$contentName").append
("fields", "$fields").as("contents"))
);
AggregationResults<MyClass> list = mongoOperations.aggregate(aggregation, MyClass.class,
MyClass.class);
Run It Ваш результат ждет Вас ...