Запрос подчиненного документа вложенного документа в mongoose - PullRequest
0 голосов
/ 04 апреля 2020

Внутри моего родителя у меня много дочерних элементов, и у одного из них есть много дочерних элементов, мне нужно вернуть дочерние элементы от указанного c дочернего элемента.

exports.test = (req, res) => {
    Forum.find({title: req.params.id}).then(record => {
        console.log(record);
    })
};

Код здесь возвращает следующее, когда я вставляю правильный URL-адрес News & Announcement:

_id: 5e7bf52ebb5b2b09fb46e29f,
title: 'News & Announcements',
property: 'ACP',
position: 1,
visible: true,
topics: [ [Object], [Object], [Object] ],
__v: 5 } ]

Затем я хочу получить доступ к темам и вернуть определенный c topi c - найти его по имени / название, как я сделал выше, как бы я это сделал?

1 Ответ

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

Если это поле тем является массивом объектов, и каждый объект содержит имя и заголовок, тогда вы можете искать нужные вам топи c, просто добавьте их к объекту, который вы передали в запрос поиска

* Например, 1002 *. Если вам нужно запросить топи c с именем 'My Topi c', тогда запрос должен быть
Forum.find({ title: req.params.id, 'topics.name': 'My Topic' })

, это сузит результаты запроса, но если на том же форуме есть другие темы с разными именами, они будут указаны в запросе

, например, если на каком-либо форуме есть следующая информация:

{
    _id: ObjectId("5e7bf52ebb5b2b09fb46e29f"),
    title: 'News & Announcements',
    property: 'ACP',
    position: 1,
    visible: true,
    topics: [
        {
            name: 'Topic 1',
            title: 'Title 1'
        }, {
            name: 'Topic 2',
            title: 'Title 2'
        }, {
            name: 'My Topic',
            title: 'My Title'
        }
    ],
}

и Вы ищите topi c 'My Topi c' только в этом форуме, все массивы тем будут возвращены из запроса, так как поиск выполняется по документам

, поэтому вам нужно сделать некоторые javaScript трюк после завершения запроса, чтобы получить только топи c, который имеет имя, которое вы хотели

var myTopic = record.ropics.filter(topic => topic.name === 'My Topic'} 

это вернет топи c вы хотели только

...