【问题标题】:Limit mongoose returning owner object with child array使用子数组限制猫鼬返回所有者对象
【发布时间】:2018-06-11 19:05:34
【问题描述】:

我确定这在某个地方,我通读了 MongoDB 文档和一些猫鼬,但我只是想弄清楚如何限制填充的结果,这样它就不会尝试获取整个用户,只是子数组。

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

结果如下: 我只是想获取“问题”数组,但如果可能的话,不只是过滤掉结果,而是停止要求整个用户开始,这是我的猫鼬查询:

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'});
                }
            });
        }

【问题讨论】:

    标签: arrays json node.js mongodb mongoose


    【解决方案1】:

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

    父子文档查询示例:User.Question[0];。我还不确定如何有效地获取多个子文档。但这应该可以帮助您入门。

    父子id查询示例:User.Question.id(_id);其中 _id 可以是 url 中的参数,也可以是正文中的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2018-08-28
      • 2021-02-23
      • 2020-11-24
      相关资源
      最近更新 更多