2016-03-05 3 views
1

У меня есть документ mongoose под названием RegisterList, и этот документ содержит поддокумент Booking.Как найти последний поддокумент в mongoose

Здесь я должен получить поддокумент, который совсем недавно добавленного поддокумент

ниже моего JSON данные

[ 
    { 
     _id: "56a3174bfc518cd014af7abd", 
     area_name: "padi", 
     name: "Vignesh", 
     email: "[email protected]", 
     mobile_no: "9282438685", 
     otp: "1625", 
     __v: 0, 
     date: "2016-01-23T06:01:47.450Z", 
     booking: [ 
      { 
       name: "Vignesh", 
       mobile: "9282438685", 
       can_name: "Kinley", 
       can_quantity: "2", 
       can_cost: "80", 
       can_path: "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
       delivery_date: "23-01-2016", 
       delivery_timeslot: "3pm-8pm", 
       order_id: "S16064", 
       subscription: "true", 
       subscription_type: "EveryDay", 
       total_cost: "560", 
       address: "12,Ramanrajan street,,padi,Chennai", 
       _id: "56a3174bfc518cd014af7abe", 
       delivered_at: "2016-01-22T18:30:00.000Z", 
       ordered_at: "2016-01-23T06:01:47.451Z", 
       status: "Delivered" 
      }, 
      { 
       name: "Vignesh", 
       mobile: "9282438685", 
       can_name: "Kinley", 
       can_quantity: "2", 
       can_cost: "80", 
       can_path: "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
       delivery_date: "24-01-2016", 
       delivery_timeslot: "3pm-8pm", 
       address: "12,Ramanrajan street,,padi,Chennai", 
       order_id: "S16064", 
       subscription_type: "EveryDay", 
       _id: "56a31ba2d55894ec15eac1cf", 
       ordered_at: "2016-01-23T06:20:18.479Z", 
       status: "UnderProcess" 
      } 
     ] 
    }, 
    { 
     _id: "56a0bc8d3306f388131e56c6", 
     area_name: "kodambakkam", 
     name: "Ganesh", 
     email: "[email protected]", 
     mobile_no: "9042391491", 
     otp: "7828", 
     __v: 0, 
     date: "2016-01-21T11:10:05.074Z", 
     booking: [ 
      { 
       name: "Ganesh", 
       mobile: "9042391491", 
       can_name: "Bisleri", 
       can_quantity: "5", 
       can_cost: "250", 
       can_path: "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
       delivery_date: "23-01-2016", 
       delivery_timeslot: "3pm-8pm", 
       order_id: "S12348", 
       subscription: "true", 
       subscription_type: "Alternate", 
       total_cost: "1000", 
       address: "15/A,Main Street,kodambakkam,Chennai", 
       _id: "56a3164dc2c549e811c0d08f", 
       delivered_at: "2016-01-22T18:30:00.000Z", 
       ordered_at: "2016-01-23T05:57:33.169Z", 
       status: "Delivered" 
      }, 
      { 
       name: "Ganesh", 
       mobile: "9042391491", 
       can_name: "Bisleri", 
       can_quantity: "5", 
       can_cost: "250", 
       can_path: "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
       delivery_date: "25-01-2016", 
       delivery_timeslot: "3pm-8pm", 
       address: "15/A,Main Street,kodambakkam,Chennai", 
       order_id: "S12348", 
       subscription_type: "Alternate", 
       _id: "56a31c29d55894ec15eac1d0", 
       ordered_at: "2016-01-23T06:22:33.307Z", 
       status: "UnderProcess" 
      } 
     ] 
    } 
] 

как я могу найти последний вставленный поддокумент в одиночестве. в данном JsonCode.

Помощь будет оценена ...

Обновлено:

Мне нужно найти данные для условия AND для delivery_date и status, так как я могу написать мангуста запрос, чтобы получить данные

+0

Не совсем понятно, что вы просите. Вы имеете в виду самое последнее значение '' ordered_at ''из массива для каждого документа в коллекции? Или вы, возможно, имеете в виду суб-документ с самым последним значением из ** «всех» ** документов в коллекции? Во всяком случае, в любом данном документе элемент «последний» массив всегда будет самым последним, если вы специально не добавляете новые позиции в позиции или не сортируете массивы при обновлении. –

+0

точно ** Вы имеете в виду самое последнее значение «ordered_at» из массива для каждого документа в коллекции ** – Nodemon

+0

Если вы подталкиваете субдокумент к массиву 'book' через' $ push', он вставляет элементы в конец массив. Если в ['$ position'] (https://docs.mongodb.org/manual/reference/operator/update/position/) в нем. – zangw

ответ

1

Исходя из предположения, вы можете получить последний дополнительный документ, используя структуру агрегации.

MongoDB Версия 3.2+

db.col.aggregate([ 
{$project: { 
    "area_name" : 1, 
    "name" : 1, 
    "email" : 1, 
    "mobile_no" :1, 
    "otp" : 1, 
    "__v" : 1, 
    "date" : 1, 
    "booking": {$slice :["$booking",-1]}}} 
]) 

MongoDB Версия < 3,2

db.col.aggregate([ 
    // Stage 1 
    { 
     $unwind: "$booking" 
    }, 

    // Stage 2 
    { 
     $sort: { 
     "booking.ordered_at":-1 
     } 
    }, 

    // Stage 3 
    { 
     $group: { 
     _id: { 
     id: "$_id", 
     "area_name" : "$area_name", 
     "name" : "$name", 
     "email" : "$email", 
     "mobile_no" :"$mobile_no", 
     "otp" : "$opt", 
     "date" : "$date" 
     }, 
     booking:{$first: "$booking"} 
     } 
    }, 

    // Stage 4 
    { 
     $project: { 
     _id: 0, 
     _id: "$_id.id", 
     "area_name" : "$_id.area_name", 
     "name" : "$_id.name", 
     "email" : "$_id.email", 
     "mobile_no" :"$_id.mobile_no", 
     "otp" : "$_id.opt", 
     "date" : "$_id.date", 
     "booking": 1 
     } 
    } 
    ]); 

Основываясь на ваших предоставленных образцов документов, вывод будет выглядеть

{ 
    "_id" : "56a3174bfc518cd014af7abd", 
    "booking" : { 
     "name" : "Vignesh", 
     "mobile" : "9282438685", 
     "can_name" : "Kinley", 
     "can_quantity" : "2", 
     "can_cost" : "80", 
     "can_path" : "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
     "delivery_date" : "24-01-2016", 
     "delivery_timeslot" : "3pm-8pm", 
     "address" : "12,Ramanrajan street,,padi,Chennai", 
     "order_id" : "S16064", 
     "subscription_type" : "EveryDay", 
     "_id" : "56a31ba2d55894ec15eac1cf", 
     "ordered_at" : "2016-01-23T06:20:18.479Z", 
     "status" : "UnderProcess" 
    }, 
    "area_name" : "padi", 
    "name" : "Vignesh", 
    "email" : "[email protected]", 
    "mobile_no" : "9282438685", 
    "date" : "2016-01-23T06:01:47.450Z" 
} 
{ 
    "_id" : "56a0bc8d3306f388131e56c6", 
    "booking" : { 
     "name" : "Ganesh", 
     "mobile" : "9042391491", 
     "can_name" : "Bisleri", 
     "can_quantity" : "5", 
     "can_cost" : "250", 
     "can_path" : "http://test15.watervan.in/wp-content/uploads/2015/07/p-95-WV-Kinley-25l.png", 
     "delivery_date" : "25-01-2016", 
     "delivery_timeslot" : "3pm-8pm", 
     "address" : "15/A,Main Street,kodambakkam,Chennai", 
     "order_id" : "S12348", 
     "subscription_type" : "Alternate", 
     "_id" : "56a31c29d55894ec15eac1d0", 
     "ordered_at" : "2016-01-23T06:22:33.307Z", 
     "status" : "UnderProcess" 
    }, 
    "area_name" : "kodambakkam", 
    "name" : "Ganesh", 
    "email" : "[email protected]", 
    "mobile_no" : "9042391491", 
    "date" : "2016-01-21T11:10:05.074Z" 
} 
Смежные вопросы