Я пытаюсь найти определенное значение в подмассиве, используя 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а, причина: ошибка}]