Я знаю, что я неправильно форматирую запрос, но я не могу получить записи в документе из вложенного массива. То, что я пытаюсь сделать, это получить все объекты в массиве с определенным значением в поле меню.
Я также использую mongo-tenant , поэтому объект "Настройки" уже ограничен одним документом в коллекции, поскольку это единственный документ в настройках для этого клиента. (ссылка на req.params.db раньше в URL, чем на видимом маршруте)
До сих пор я пытался, основываясь на многих поисках в Интернете
.find({}) // returns entire object as below
.find({dropsDowns: { menu: { $eq: req.params.menu }}}) // returns []
.find({ dropsDowns: { menu: req.params.menu } }) // returns []
.find({'dropDowns.menu':req.params.menu}) // returns entire object
.find({ ['dropDowns.menu']: req.params.menu }) // returns entire object
Я также попытался сделать несколько форм методов агрегации с менее чем идеальными результатами, поскольку это предполагает, что я действительно знаю, как найти нужные вещи для агрегации, чего я, очевидно, нет.
settingsRoute.route('/dropDowns/:menu').get(function(req, res) {
const Settings = baseSettings.byTenant(req.params.db)
Settings.find({}).exec(function(
err,
menu
) {
if (err) {
return res.status(400).json(err)
}
res.status(200).json(menu)
})
})
это возвращает ниже в мой браузер
[
{
_id: "5cea1b835e13fb4180be2699",
dropDowns: [
{
_id: "5cea1b835e13fb4180be26a7",
menu: "frequencyOptions",
text: "Monthly",
value: 30,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be26a6",
menu: "frequencyOptions",
text: "Every two months",
value: 60,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be26a3",
menu: "meterIntervals",
text: "250",
value: 250,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be26a2",
menu: "meterIntervals",
text: "500",
value: 500,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be269e",
menu: "transitionIntervals",
text: "Due at normal interval",
value: 0,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be269d",
menu: "transitionIntervals",
text: "Offset by 25% of normal",
value: 250,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.287Z",
updatedAt: "2019-05-26T04:52:19.287Z"
}
],
tenantId: "maxx1",
siteSettings: {
siteTheme: "dark",
friendlyName: "No Name Set :(",
activeStatus: "transit",
previousStatus: "transit",
numBackupsToKeep: 10,
daysPerBackup: 7,
_id: "5cea1b835e13fb4180be26ad",
backups: [ ],
createdAt: "2019-05-26T04:52:19.287Z",
updatedAt: "2019-05-26T04:52:19.287Z"
},
createdAt: "2019-05-26T04:52:19.287Z",
updatedAt: "2019-05-26T04:52:19.287Z",
__v: 0
}
]
Что такое правильное форматирование, чтобы получить что-то вроде приведенного ниже возврата, если бы я ударил API с /dropDowns/frequencyOptions
dropDowns: [
{
_id: "5cea1b835e13fb4180be26a7",
menu: "frequencyOptions",
text: "Monthly",
value: 30,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
{
_id: "5cea1b835e13fb4180be26a6",
menu: "frequencyOptions",
text: "Every two months",
value: 60,
tenantId: "maxx1",
createdAt: "2019-05-26T04:52:19.286Z",
updatedAt: "2019-05-26T04:52:19.286Z"
},
}
Я все еще строю структуру базы данных, поэтому, если есть более эффективный способ сбора данных такого типа, я также открыт для рекомендаций.
Спасибо за любую помощь.