如何在mongoose

时间:2016-03-05 06:30:08

标签: node.js mongodb mongoose

我有一个名为RegisterList的mongoose文档,该文档包含名为Booking的子文档。

这里我需要检索子文档,这是最近添加的子文档

下面是我的json数据

[
    {
        _id: "56a3174bfc518cd014af7abd",
        area_name: "padi",
        name: "Vignesh",
        email: "vignesh4008@gmail.com",
        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: "ganesh@gmail.com",
        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中。

帮助将不胜感激......

更新

我需要找到ANDdelivery_date的{​​{1}}条件的数据,那么如何编写mongoose查询来获取数据

1 个答案:

答案 0 :(得分:1)

根据假设,您可以使用聚合框架获取最新的子文档。

  

Mongodb版本3.2 +

u3 = (abs(q+r)>abs(q-r))? -(q+r) : -(q-r)

u = u3**(1/3)
v = -p/(3*u)
  

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]}}}
])

根据您提供的示例文档,输出看起来像

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
      }
    }
  ]);
相关问题