计算每个文档的子文档

san*_*zer 4 mongodb mongodb-query

我试图只计算每个文档在Mongo中的子文档。

使用可以很容易地获得集合中的文档db.users.find().length()。我想做类似的事情db.users.projects.find().length()。我怎样才能做到这一点?

编辑:

我想要的结果是知道每个用户有多少个项目……类似:

{_id: 123, projects: 4}

用户文档示例:

{
   _id:{$oid: 123},
   username: johnsmith,
   projects: [{$oid: 456}, {$oid: 789}]
}
Run Code Online (Sandbox Code Playgroud)

Emp*_*nal 5

根据@ n9code,您将需要聚合框架。但是,您可以使用以下命令轻松地计算子文档$size

db.users.aggregate([{
  $project: {
    _id: '$_id',
    totalProjects: { $size: "$projects" }
  }
}]);
Run Code Online (Sandbox Code Playgroud)

哪个应该返回如下内容:

{ "_id" : ObjectID(...), "totalProjects" : 89 }, ...
Run Code Online (Sandbox Code Playgroud)

$ size将返回projects每个文档的数组长度,而$ project会更改文档的格式以包含totalProjectsprojects数组的大小。


bag*_*rat -1

你需要 MongoDBAggregation Framework在这里:

db.users.aggregate({$unwind: '$projects'}).count()
Run Code Online (Sandbox Code Playgroud)

这将展开projects集合中每个文档中的数组字段,这将是子文档的总数projects