2015-12-26 1 views
-3

Я использую Grails (2.3.7)MongoDB Горм плагин MongoDB: 3.0.1. я следующая коллекция в дбGrails критерии MongoDB Горм запрос

{ 
     "_id" : ObjectId("567eac392c56fd49950e2441"), 
     "comments" : [ 
       { 
         "commentText" : "test comments!", 
         "userId" : "[email protected]", 
         "likes" : 10, 
         "date" : "2015-12-25T10:34:53.048Z" 
       }, 
       { 
         "commentText" : "master piece", 
         "userId" : "[email protected]", 
         "likes" : 12, 
         "date" : "2015-12-25T10:34:53.052Z" 
       }, 
       { 
         "commentText" : "test comments!", 
         "userId" : "[email protected]", 
         "likes" : 10, 
         "date" : "2015-12-25T10:34:53.048Z" 
       }, 
       { 
         "commentText" : "master piece", 
         "userId" : "[email protected]", 
         "likes" : 12, 
         "date" : "2015-12-25T10:34:53.052Z" 
       } 
     ], 
     "doctorUserId" : "[email protected]", 
     "recommendation" : 0, 
     "version" : NumberLong(2) 
} 

Теперь я хочу, чтобы запросить внутренний порядок комментарии параметров по дате (внутри комментария) с использованием MongoDB GORM

Благодаря inadvance

+0

Что вы пробовали? Отправьте код, который вы попробовали, и объясните возникшую проблему. Проводка ваше требование не хватает –

+0

четкости commentCriteria = DoctorSocial.createCriteria() результаты DEF = commentCriteria.list (макс: 10) { \t эк ("doctorUserId", params.doctorId) } – Sunil

+0

Защиту commentCriteria = DoctorSocial.createCriteria () результаты DEF = commentCriteria.list (макс: 10) { \t экв ("doctorUserId", params.doctorId) } запрос будет получать коллекцию, которая соответствует doctorId. и в комментариях mongoDB хранится как массив, и я не знаю, как запросить внутренний массив, используя mongoDB gorm Запрос, который я пытаюсь использовать внутри mongoDB, это db.doctorSocial.find ({doctorUserId: "[email protected]"}, {comments: {$ elemMatch: {userId: "[email protected]"}}}). pretty() – Sunil

ответ

0

Прежде всего, для правильной сортировки по дате все поля даты должны иметь Date type, а не строку. Так что ваше поле дата должна выглядеть следующим образом:

date: ISODate("2015-12-26T16:33:44.592Z") 

Вы можете отсортировать вложен массив, используя MongoDB aggregation. Попробуйте следующий код:

db.collection.aggregate([ 
    {$unwind: "$comments"}, 
    {$sort: {'comments.date': 1} }, 
    {$group: { 
     _id: '$_id', 
     comments: {$push: '$comments'}, 
     version: {$first: "$version"}, 
     doctorUserId: {$first: "$doctorUserId"}, 
     recommendation: {$first: "$recommendation"} 
     } 
    } 
]) 
+0

Мне нужно запросить данные с помощью плагина MongoDB GORM в grails https://grails.org/plugin/mongodb – Sunil

0

Конвертирования ответа Владимира Synytskyi на Grails/GORM:

DBObject unwind = new BasicDBObject(['$unwind': '$comments']); 

DBObject sort = new BasicDBObject(['$sort': [ 
    'comments.date' : 1 
]]); 

DBObject group = new BasicDBObject(['$group': [ 
    '_id'   : '$_id', 
    'comments'  : ['$push' : '$comments'], 
    'version'  : ['$first': '$version'], 
    'doctorUserId' : ['$first': '$doctorUserId'], 
    'recommendation': ['$first': '$recommendation'] 
]]); 

DBColleciton collection = DoctorSocial.collection; 
AggregationOutput aggregationOutput = collection.aggregate([unwind, sort, group]); 
aggregationOutput.results().each { dbObject -> 
    // Do something with your results 
} 

Примечания: Выше непроверенная так некоторые настройки могут быть в порядке, но Похожее использование агрегатов работает нормально в моем приложении.

 Смежные вопросы

  • Нет связанных вопросов^_^