$ или агрегат не работает в nodejs, но работает в mongoshell - PullRequest
0 голосов
/ 31 января 2020

это мой запрос mongoshell:

db.orders.aggregate([ 
        { 
            '$match': { 
                "orderCreatedBy": ObjectId("5e2555363405363bc4bf86c2"),
                 "submittedTo": ObjectId("5e25550a3405363bc4bf86c1"),
                '$or': [
                    {'orderCreatedOn': ISODate("2020-02-01T18:30:00Z")},
                    {'orderCreatedOn': ISODate("2020-01-25T18:30:00Z")}
                ]}}]).pretty()

, который работает, как и ожидалось, в mongoshell, теперь вот мой nodejs код:

const Order = require("../model/order");
const mongoose = require('mongoose')

exports.dashboard = async (req, res, next) => {
const { submittedTo, orderCreatedBy } = req.body;

  let lastWeekDate = new Date();
  let numberOfDaysToSubtract = -6;
  lastWeekDate.setDate(lastWeekDate.getDate() + numberOfDaysToSubtract);
  let date = lastWeekDate.toISOString().split("T")[0] + "T18:30:00.000Z";
  date = new Date(date);
  console.log(date) // 2020-01-25T18:30:00.000Z

  let tomorrowDate = new Date();
  tomorrowDate = tomorrowDate.setDate(tomorrowDate.getDate() + 1);
  tomorrowDate = new Date(tomorrowDate);
  tomorrowDate = tomorrowDate.toISOString().split("T")[0] + "T18:30:00.000Z";
  tomorrowDate = new Date(tomorrowDate);
  console.log(tomorrowDate) // 2020-02-01T18:30:00.000Z

  try {
    const order = await Order.aggregate([
      {
        "$match": {
          orderCreatedBy: mongoose.Types.ObjectId(orderCreatedBy),
          submittedTo: mongoose.Types.ObjectId(submittedTo),
          "$or": [
            { "orderCreatedOn": date },
            { "orderCreatedOn": tomorrowDate }
          ]
        }
      }])
        return res.status(200).json({
          order
          });
      } catch (error) {
        res.send(error);
      }
    };

POSTMAN BODY: {"orderCreatedBy":"5e25550a3405363bc4bf86c1","submittedTo":"5e2555363405363bc4bf86c2"} ОТВЕТ POSTMAN: {"order": []}

пожалуйста, посмотрите, почему это не работает в драйвере nodejs, а в оболочке только здесь образец документа из коллекции заказов

    "_id" : ObjectId("5e27f736a42d441fe8a8957d"),
    "isApproved" : false,
    "vendorOrder" : [
            {
                    "_id" : ObjectId("5e26be38c13b7149d0a95113"),
                    "publicationCode" : "TOI",
                    "publicationName" : "Times of India",
                    "editionName" : "chennai city",
                    "productCode" : "TCE1",
                    "subscriptionCopies" : 70,
                    "tradeCopies" : 40
            },
            {
                    "_id" : ObjectId("5e26be38c13b7149d0a95112"),
                    "publicationCode" : "ET",
                    "publicationName" : "Economic Times",
                    "editionName" : "chennai city",
                    "productCode" : "ECE1",
                    "subscriptionCopies" : 20,
                    "tradeCopies" : 100
            }
    ],
    "frequency" : "TH",
    "orderCreatedBy" : ObjectId("5e2555363405363bc4bf86c2"),
    "submittedTo" : ObjectId("5e25550a3405363bc4bf86c1"),
    "orderCreatedOn" : ISODate("2020-02-01T18:30:00Z"),

Есть несколько документов один документ также с "orderCreatedOn": ISODate ("2020-02-25T18: 30: 00Z") последней недели Мне нужно показать оба документа, я прокомментировал условие $or, затем получил ответ, но в тот момент, когда я раскомментировал $ или снова поставил условие пустым []

...