使用子数组限制mongoose返回所有者对象

时间:2018-01-02 02:09:46

标签: arrays json node.js mongodb mongoose

我确定这是在某个地方,我已经阅读了MongoDB文档和一些mongoose块,但我只是想弄清楚如何限制填充的结果,所以它不会尝试获得整个用户,只是子阵列。

我有2个模式,指示2个集合,'问题'和'用户',当我添加一个问题时,使用它的用户被分配了它,现在我想要检索他们所有的问题,但是当我这样做的时候也是返回我不想要的整个所有者对象,因为它浪费了计算,并且在他们提出请求时我已经知道用户。

结果如下: enter image description here 我只是想得到'问题'数组,但不仅仅是在可能的情况下过滤掉结果,而是停止要求整个用户开始,这是我的mongoose查询:

if (req.body.action == 'q_get') {
            var idtoken = req.body.idtoken;
            settings.userPayload(idtoken).then((result) => {
                if (result) {
                    USER.findOne({'unique_id': result['sub']})
                        .populate('questions')
                        .exec(function (err, questionsResult) {
                            if (err) return console.log(err);
                            res.json(questionsResult);
                        });
                } else {
                    res.json({result: 'failed to validate session'});
                }
            });
        }

1 个答案:

答案 0 :(得分:0)

如果您有2个单独的集合,则可以以相同的方式查询它们。而不是User.find()使用Question.find()并使用用户ID或任何链接它们的过滤器进行过滤。但是,您看起来像问题的输出是用户的子文档,因此您必须使用父子相关查询或过滤查询,除了子文档之外的所有内容。

父子文档查询的示例:User.Question [0];。我不确定如何有效地获取多个子文档。但这应该让你开始。

通过id进行父子查询的示例:User.Question.id(_id);其中_id可以是网址或正文中的参数。