MongoDB:计算集合中文档的出现次数

时间:2018-01-25 11:49:13

标签: node.js mongodb mongoose

我需要计算其他集合中的引用文档,就像我有以下场景:

书籍:

{
  id: "123",
  name: "Alpha"
}, {
  id: "124",
  name: "Beta"
}, {
  id: "125",
  name: "Gamma"
}

用户:

{
  id: "234",
  name: "user 1"
  fav_books: ["123", "124"]
}, {
  id: "235",
  name: "user 1"
  fav_books: ["123", "124", "125"]
}, {
  id: "236",
  name: "user 1"
  fav_books: ["123", "125"]
}, 

我需要计算所有用户集合中的每本书数,如上面的情景应输出:

{
  "123": "3",
  "124": "2",
  "125": "2"
}

1 个答案:

答案 0 :(得分:3)

如果您从未开始运行mongodb 3.4:

db.Users.aggregate( [ 
          { $unwind: "$fav_books" }, 
          { $sortByCount: "$fav_books" }
          ] )

无需加入。除非您想显示图书名称,否则每个用户文档中都有一系列图书ID。

以上代码输出:

{
    "_id" : "123",
    "count" : 3
}
{
    "_id" : "125",
    "count" : 2
}
{
    "_id" : "124",
    "count" : 2
}