用猫鼬查询子文档中的子文档

时间:2020-04-04 00:27:18

标签: node.js mongodb mongoose find subdocument

我父母中有很多孩子,其中一个孩子中还有很多子孩子,我需要从特定孩子那里归还子孩子。

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

当我插入正确的“新闻与公告” URL参数时,此处的代码将返回以下内容:

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

然后,我想访问主题并返回特定主题-像上面一样通过名称/标题查找它,我将如何做?

1 个答案:

答案 0 :(得分:0)

如果此主题字段是一个对象数组,并且每个对象都包含名称和标题,那么您可以搜索所需的主题,只需将其添加到传递给查找查询的对象中即可

例如,如果您需要查询名称为“我的主题”的某个主题,则查询应为

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'
        }
    ],
}

并且您仅在此论坛中搜索主题“我的主题”,因为按文档进行搜索,所有主题数组都将从查询中返回

因此,您必须在完成查询后执行一些JavaScript技巧,才能仅获取具有所需名称的主题

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

这将返回您只想要的主题