поиск разных документов в одной коллекции в драйвере mogodb- nodejs - PullRequest
0 голосов
/ 31 января 2020

ниже указаны детали: отправка коллекции

"_id" : ObjectId("5e27fd3da42d441fe8a89580"),
        "dispatched" : false,
        "dispatchableItems" : [
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95110"),
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 20,
                        "fixeditemCount" : 2
                },
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95111"),
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 5,
                        "fixeditemCount" : 1
                }
        ],
        "weekday" : "FR",
        "toBeDispatchedBy" : ObjectId("5e2696c683201450a8ddb1dc"),
        "toBeDispatchedTo" : ObjectId("5e2696f883201450a8ddb1df"),
        "toBeDispatchedOn" : ISODate("2020-02-01T18:30:00Z")

и существует несколько документов, один из которых

"_id" : ObjectId("5e27fd3da42d441fe8a89087"),
        "dispatched" : true,
        "dispatchableItems" : [
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a00997"),
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 30,
                        "giftCount" : 2
                },
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95678"),
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 10,
                        "giftCount" : 1
                }
        ],
        "weekday" : "FR",
        "toBeDispatchedBy" : ObjectId("5e2696c683201450a8ddb1dc"),
        "toBeDispatchedTo" : ObjectId("5e2696f883201450a8ddb1df"),
        "toBeDispatchedOn" : ISODate("2020-01-25T18:30:00Z")

1: i нужно показать документы для ISODate ("2020-02-01T18: 30: 00Z") и ISODate ("2020-01-25T18: 30: 00Z") (т.е. данные D-7 за последнюю неделю) 2: я получу это from req.body {"toBeDispatchedBy", "toBeDispatchedto"} это то, что я пробовал

db.orders.aggregate([
    {'$match': {'toBeDispatchedBy': ObjectId("5e2696c683201450a8ddb1dc"),
            "toBeDispatchedto": ObjectId("5e2696f883201450a8ddb1df"),
           '$or': [
                {
                    'toBeDispatchedOn': ISODate("2020-02-01T18:30:00Z")
                }, {
                    'toBeDispatchedOn': ISODate("2020-01-25T18:30:00Z")
                }]}}])

, но я получаю документы только для ISODate ("2020-01-25T18: 30: 00Z ") Более того, мне нужен именно такой ответ:

"dispatchDetails": [
                   {   "toBeDispatchedOn": ISODate("2020-02-01T18:30:00Z")
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 30,
                        "giftCount" : 2,
                       "lastWeekData":[{"toBeDispatchedOn": ISODate("2020-01-25T18:30:00Z")
                                        "itemCount" : 30,
                                        "giftCount" : 2}]
                },
                {
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 10,
                        "giftCount" : 1,
                        "lastWeekData":[{"toBeDispatchedOn": ISODate("2020-01-25T18:30:00Z")
                                        "itemCount" : 30,
                                        "giftCount" : 2}]
                }
        ]

В этой коллекции много документов, мне нужно показать документы для currentDay (toBeDispatchedOn) и D-7 (toBeDispatchedOn-7 ) день на основе "toBeDispatchedBy", "toBeDispatchedto", который я получу от req.body, мне нужно реализовать этот запрос в nodejs

1 Ответ

0 голосов
/ 31 января 2020

Учитывая, что вы используете mongoose, вы можете сделать что-то вроде этого:

const { toBeDispatchedBy, toBeDispatchedTo } = req.body;
const result = await Order.find({
  toBeDispatchedBy,
  toBeDispatchedTo,
  toBeDispatchedOn: {
    $in: [new Date("2020-02-01T18:30:00Z"), new Date("2020-01-25T18:30:00Z")]
  }
});

Вам не нужно использовать агрегат для простой операции поиска.

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