0

У меня есть чат. Модель Mongoose в приведенном ниже примере. Если это еще не ясно, вернитесь ко мне со своими вопросами. Любая помощь приветствуется.Справка по запросу Mongoose: Paginate, Sort, Limit на вложенном массиве

 { 
      "_id" : ObjectId("5745910831a1sd58d070a8faa"), 
      "messages" : [ 
       { 
        "user" : "user1", 
        "message" : "How are you user1?", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:36:00.468+0000"), 
        "_id" : ObjectId("5745912c31a1c58d070a904d") 
       }, 
       { 
        "user" : "user1", 
        "message" : "Hello user1", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:38:53.893+0000"), 
        "_id" : ObjectId("5745912531a1c58d070a902e") 
       } 
      ], 
      "createDate" : ISODate("2016-05-25T11:35:20.534+0000"), 
      "users" : [ 
       "57450b4506561ff5052f0a66", 
       "57450d8108d8d22c06cf138f" 
      ], 
      "__v" : NumberInt(0) 
     }, 
     { 
      "_id" : ObjectId("57458e9331a1c58d070a8e30"), 
      "messages" : [ 
       { 
        "user" : "user2", 
        "message" : "How are you user2", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:46:03.240+0000"), 
        "_id" : ObjectId("574590f331a1c58d070a8ede") 
       }, 
       { 
        "user" : "user2", 
        "message" : "Hello user2", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:48:53.925+0000"), 
        "_id" : ObjectId("574590e931a1c58d070a8eab") 
       } 
      ], 
      "createDate" : ISODate("2016-05-25T11:35:20.534+0000"), 
      "users" : [ 
       "5745149e3aaab38706c00b64", 
       "57450d8108d8d22c06cf138f" 
      ], 
      "__v" : NumberInt(0) 
     } 
     { 
      "_id" : ObjectId("5745910831a1c58d070a8faa"), 
      "messages" : [ 
       { 
        "user" : "user3", 
        "message" : "How are you user3?", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:56:00.468+0000"), 
        "_id" : ObjectId("5745912c31a1c58d070a904d") 
       }, 
       { 
        "user" : "user3", 
        "message" : "Hello user3", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:58:53.893+0000"), 
        "_id" : ObjectId("5745912531a1c58d070a902e") 
       } 
      ], 
      "createDate" : ISODate("2016-05-25T11:35:20.534+0000"), 
      "users" : [ 
       "57450b4506561ff5052f0a66", 
       "57450d8108d8d22c06cf138f" 
      ], 
      "__v" : NumberInt(0) 
     }, 
     { 
      "_id" : ObjectId("5745910831a1c58d070a8faa"), 
      "messages" : [ 
       { 
        "user" : "user4", 
        "message" : "How are you user4?", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:66:00.468+0000"), 
        "_id" : ObjectId("5745912c31a1c58d070a904d") 
       }, 
       { 
        "user" : "user4", 
        "message" : "Hello user4", 
        "readInd" : "N", 
        "createDate" : ISODate("2016-05-25T11:68:53.893+0000"), 
        "_id" : ObjectId("5745912531a1c58d070a902e") 
       } 
      ], 
      "createDate" : ISODate("2016-05-25T11:35:20.534+0000"), 
      "users" : [ 
       "57450b4506561ff5052f0a66", 
       "57450d8108d8d22c06cf138f" 
      ], 
      "__v" : NumberInt(0) 
     } 

Ниже приводится объяснение:

  1. пользователь1 отправлено 2 сообщения на 11:36 и 11:38 соответственно
  2. пользователь2 отправлено 2 сообщений в 11:46 и 11:48 соответственно
  3. user3 отправил 2 сообщения в 11:56 и 11:58 соответственно
  4. user4 отправил 2 сообщений на 11:66 и 11:68 соответственно

Мой ожидаемый результат:

Разбивка/предельные критерии:

  1. показать 2 записей на странице.
  2. показать только последнее сообщение на основе пользователя.

Пример вывода:

Page1:

"user" : "57450d8108d8d22c06cf138f",    
    "message" : "How are you user4?" 

    "user" : "57450d8108d8d22c06cf138f", 
    "message" : "How are you user3?" 

Page2:

"user" : "57450d8108d8d22c06cf138f", 
    "message" : "How are you user2" 

    "user" : "57450d8108d8d22c06cf138f", 
    "message" : "How are you user1?" 

ответ

0

попробовать этот способ запроса, это поможет к и

запрос для первой страницы

db.getCollection('message').aggregate([ { $match : { user : "57450d8108d8d22c06cf138f" } }, 
{ $unwind : "$messages" } , 
{ $sort : { 'messages.createDate' : -1} }, 
{ $limit : 2 }, 
{ $project : { _id: 0,'message':'$messages.message','user':'$messages.user'} } ]) 

запроса на следующей странице

db.getCollection('message').aggregate([ { $match : { user : "57450d8108d8d22c06cf138f" } }, 
    { $unwind : "$messages" } , 
    { $sort : { 'messages.createDate' : -1} }, 
    { $limit : 2 },{ $skip : 2 } 
    { $project : { _id: 0,'message':'$messages.message','user':'$messages.user'} } ]) 
+0

Спасибо за вашу обратную связь. небольшое изменение на следующей странице. порядок $ limit и $ skip должен быть изменен таким образом, чтобы сначала выполнялся $ skip, а второй - второй. {$ skip: 1}, {$ limit: 1} – user2596892

+0

с правой стороны. я просто отправляю ans, но я проверяю, что – karthi

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