Mongoose - 查询以获取文档的所有子文档

Posted

技术标签:

【中文标题】Mongoose - 查询以获取文档的所有子文档【英文标题】:Mongoose - query to get all subdocuments of a document 【发布时间】:2017-02-28 00:14:11 【问题描述】:

我对猫鼬很陌生,我有一个公司列表,每个公司都有一个用户子数组。我只想用猫鼬检索特定公司的所有用户:

一家公司就像


    "_id": "57ffa47f5b70f90831212348",
    "name": "mycompany",
    "address": "...",
    "phone": "...",
    "users": [
        
            "_id": "57ffa47f5b70f90831212347",
            "username": "alpha",
            "name": "myname",
            "surname": "mysurname",
            "password": "..."
        
    ]

我试过了

Company.findOne(
        'name': req.user.name
    )

      .aggregate($unwind: '$users')

      .exec(
        function(err, users) 
          if (err) res.status(500).send(err);

          res.json(users);
        );

但我没有运气...我不确定如何正确使用聚合。

【问题讨论】:

【参考方案1】:

只需填写 company.users

Company.findOne(
        'name': req.user.name
    )
      .populate('users', 'username name surname')
      .exec(
        function(err, company) 
          if (err) res.status(500).send(err);

          res.json(company.users);
        );

【讨论】:

感谢它有效!它也可以使用 .populate('users') 。你知道我在哪里可以找到关于populateaggregate 的很好的解释吗? Mongoose Docs 当然,populate('users') 不太安全,你可能会发送敏感数据(密码,passwod_hash) 我试过了,但我发现它不是很清楚......无论如何,感谢您提供有关安全性的提示 另外,没有搜索,什么也没有

以上是关于Mongoose - 查询以获取文档的所有子文档的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose,在子文档数组上应用`.aggregate()`,并以最少的查询次数获得文档其他字段的结果

访问 mongoose 父文档以获取子文档中的默认值

如何查询和排序 Mongoose 子文档

查询子文档并从中选择过滤后的数据 Mongoose

MongoDB/Mongoose - 与 geoNear 和子文档的聚合

在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档