Фильтровать массив с Model.find () Mongoose - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть модель mon goose, в которой одно из полей представляет собой массив дат, и мне нужно запросить коллекцию, чтобы найти любой документ, который имеет дату между 7 прошлыми днями внутри этого массива, но когда я пытаюсь используйте $ gt или $ gte, он не возвращает мне документы, даже если они существуют (я проверил, существуют ли документы).

Здесь приведен пример объекта

Он не должен возвращать мне объекты с более чем 7 дней назад.

Вот код, который я использую:

const { subDays } = require("date-fns");
const mongoose = require("mongoose");
const Journey = require("./models/Journey");
const url = "my-db-url";

mongoose.set("useNewUrlParser", true);
mongoose.set("useUnifiedTopology", true);
mongoose.set("useCreateIndex", true);
mongoose.set("useFindAndModify", false);

mongoose.connect(url, (err) => {
  if (err) throw err;

  console.log("Mongoose connected");
});

Journey.find({
  hospital: "5e6fc0d98db5810012aeb8fe",
  active: false,
  timestampStart: {
    $gte: subDays(new Date(), 7)
  }
})
  .lean()
  .exec((err, journeys) => {
    if (err) throw err;

    console.log(journeys[0]);
  });

Модель путешествия:

const { Schema, model } = require("mongoose");

const JourneySchema = new Schema(
  {
    tag: {
      type: Schema.Types.ObjectId,
      required: true,
      ref: "Tag",
    },
    patient: {
      type: Schema.Types.ObjectId,
      required: true,
      ref: "Patient",
    },
    hospital: {
      type: Schema.Types.ObjectId,
      required: true,
      ref: "Hospital",
    },
    department: {
      type: [String],
      required: true,
    },
    timestampStart: {
      type: [Date],
      required: true,
    },
    timestampEnd: {
      type: [Date],
      required: true,
    },
    active: {
      type: Boolean,
      default: true,
    },
    rssi: {
      type: [String],
      required: true,
    },
  },
  {
    timestamps: true,
  }
);

module.exports = model("Journey", JourneySchema);

Может кто-нибудь помочь мне построить этот фильтр?

1 Ответ

0 голосов
/ 28 апреля 2020

Кажется, что запрос даты работает нормально. Я думаю, что проблема будет с больницей и активным ключом. В предоставленном вами примере объекта оба отсутствуют. Вы можете проверить это, удалив эти ключи в запросе или добавив их в коллекцию.

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