Как я могу добавить значения документа в зависимости от дня, созданного в MongoDB? - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужно добавить значение, присутствующее в свойстве «value» каждого документа, который создан. Это текущий день, что у документа есть свойство «done» как true, и что у документа есть «value» и «period»Свойство .check_out.

До сих пор я был в состоянии выбрать все документы, которые имеют свойство period.check_out, и суммировать значения.Проблема в выборе документов текущего дня.Я пытался сортировать по дням разными способами, но у меня ничего не получается.

Я включил модели баз данных nas, поэтому, когда я создаю новый документ, он автоматически добавляет меня в созданный, обновленный Ат и _v.

пример документа:

[
    {
        "_id": "1",
        "client": {
            "name": "raul germano"
        },
        "parking": {
            "_id": "5d8bfe395e0a822b143fd68d",
            "value": 2.59,
            "name": "pro parking oficial"
        },
        "finished": false,
        "createdAt": "2019-09-25T23:54:32.802Z",
        "updatedAt": "2019-09-25T23:54:32.802Z"
    },
    {
        "_id": "2",
        "client": {
            "name": "raul vitor"
        },
        "parking": {
            "_id": "5d8bfe395e0a822b143fd68d",
            "value": 2.32,
            "name": "pro parking oficial"
        },
        "period": {
            "check_in": {
                "user": "caboco",
                "moment": "2019-09-25T00:05:36.273Z"
            },
            "check_out": {
                "user": "outro caboco",
                "moment": "2019-09-25T00:09:56.506Z"
            }
        },
        "hours": 0.07,
        "value": 0.17,
        "finished": true,
        "createdAt": "2019-09-26T23:54:33.463Z",
        "updatedAt": "2019-09-26T23:54:33.463Z"
    },
    {
        "_id": "3",
        "client": {
            "name": "raul germano"
        },
        "parking": {
            "_id": "5d8bfe395e0a822b143fd68d",
            "value": 2.60,
            "name": "pro parking oficial"
        },
        "finished": true,
        "createdAt": "2019-09-25T23:54:33.463Z",
        "updatedAt": "2019-09-25T23:54:33.463Z",
        "period": {
            "check_in": {
                "user": "caboco",
                "moment": "2019-09-25T00:05:36.273Z"
            },
            "check_out": {
                "user": "outro caboco",
                "moment": "2019-09-25T00:09:56.506Z"
            }
        },
        "hours": 0.09,
        "value": 0.23
    }
] 

Текущий запрос:

collection.aggregate([
    {
        $match: {
            'period.check_out': {
                $exists: true
            },
            createdAt: {
                $gte: new Date("2019-09-24")
                $lt: new Date("2019-09-25")
            }
        }
    },
    {
        $unwind: '$parking'
    },
    {
        $match: {
            'parking._id': Types.ObjectId(parking_id)
        }
    },
    {
        $group: {
            _id: Types.ObjectId(parking_id),
            total: {
                $sum: '$value'
            }
        }
    }
])

Таким образом он выбирает последние 24 часа

На основе документов, представленных вышеМне нужно выбрать только документы _id "1" и "2".Таким образом, в результате

1 Ответ

0 голосов
/ 26 сентября 2019

Попробуйте заменить ваш $ match следующим, учитывая, что '2019-09-26' является текущей датой:

{
    $match: {
        'period.check_out': {
            $exists: true
        },
        createdAt: {
            $gte: new Date('2019-09-26'),
            $lte: new Date(),
        }
    }
},

То, что вы соответствуете: $ gte: 2019-09-24T00: 00:00.000Z, $ lte: 2019-09-25T00: 00: 00.000Z.И я не думаю, что это будет текущая дата.Вместо этого вам нужно указать «2019-09-24T00: 00: 00.000Z» - текущее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...