Ну, в MongoDB нет концепции внутренних запросов, поэтому в основном это может быть достигнуто с помощью двух запросов, но, вероятно, вы уже знаете это и хотите «лучшее» решение. Поскольку вы спросили, возможно ли , я думаю, что это может быть достигнуто путем агрегации, однако это может быть сложно.
db.feedback.aggregate([
{$project : {
'outletId' : 1,
'feedback._id' : '$_id',
'feedback.createdOn' : '$createdOn',
'feedback.a' : '$a'
}},
{$group : {
_id : $outletId,
feedbacks : {$addToSet : '$feedback'}
}},
{$match : {
'feedbacks.createdOn' : {
$gte : ISODate('2013-05-03')}
}},
{$unwind : '$feedback'}]);
В конце вы можете добавить еще один этап проекта $, чтобы превратить дочерний объект в значения, как это было в документе. Я знаю, что это не выглядит красиво, но я бы объяснить это поэтапно,
первым проектирует документ с положить все необходимое поле внутри поля ребенка называется обратной связью,
на втором этапе мы сгруппировали его by outletId и поместить всю обратную связь с дочерними элементами в массив с именем обратной связи (так что для каждого выхода мы получаем все обратные связи).
на третьем этапе мы используем $ спичку, чтобы отфильтровать, где нет даже одной обратной связи в массиве, который createdOn поле превышает установленную дату,
после этих outletIds отфильтровываются мы называем раскручивать, чтобы каждый ребенок в массиве обратных связей как единый документ.
Теперь, если мы поговорим о mongoTemplate, да, он принимает все эти параметры для агрегации, включая вложенность дочернего элемента в обратную связь на первом этапе. просто увидеть некоторый пример TypedAggregation
если вы сохраняете поле createdOn в виде строки вместо временной метки или ISODate даже нормальных запросы Монго не будет работать на том, что, когда вам нужно найти диапазон, как его работу в вашем примере Postgres ,
Надеюсь, это поможет.
Как этот запрос отличается от 'select * from feedback где feedback.createdOn> = '2013-05-03' :: date, видя, что вы запрашиваете из одной таблицы,' feedback'? – chridam
ваш запрос возвращает обратные связи, созданные по истечении заданного времени. Я хочу, чтобы все отзывы (даже если они были сделаны до заданного времени) торговых точек, у которых по крайней мере одна обратная связь создана после заданного времени. –