Найдите значение из подмассива за последние 30 дней с помощью Mongoose - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь найти определенное значение в подмассиве, используя Mon goose. js с MongoDB. Ниже моя схема Mon goose.

const foobarSchema = new mongoose.Schema({

foo: {
    type: Array, 
    required: true
},

comments: {
    type: Array, 
    required: false
},

createdAt: { type: Date, required: true, default: Date.now }

});

Значение, которое я пытаюсь получить, находится внутри foo, поэтому в foo у меня всегда есть один массив на месте [0], который содержит объект, подобный приведенному ниже

{
    _id
    code
    reason
    createdAt
}

Я хотел бы получить значение для reason для всех записей, созданных за последние 30 дней. Я посмотрел на переполнение стека и не нашел ничего, что можно было бы собрать. Ниже приведен мой существующий, но не рабочий код

const older_than = moment().subtract(30, 'days').toDate();
Foobar.find({ ...idk.. req.body.reason, createdAt: { $lte: older_than }})

изменить добавить макет документа

{
  foo: [{
    _id: 'abc123',
    code: '7a',
    reason: 'failure',
    createdAt: mongo time code date now
  }],
  comments: []
}

текущий код наполовину рабочий

const reason = req.params.reason
const sevenAgo = moment().subtract(7, 'days').toISOString()
Foo.aggregate([
        {
          $match: {
            "foo.createdAt": {
              $gte: sevenAgo
            },
            "foo.reason": {
                reason  
            }
          }
        },
        {
          $project: {
            reason: {
              $arrayElemAt: [
                "$foo.reason",
                0
              ]
            }
          }
        }
      ])

В настоящее время возвращает пустой массив - без запроса сбой - что неверно, он должен вернуть по крайней мере 1 документ / запись, поскольку это то, что находится в БД, которая соответствует

ожидаемым фиктивным данным [{код: 7a, причина: сбой} {код: 7а, причина: ошибка}]

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