【问题标题】:MongoDB: Count number of occurrence of document in collectionMongoDB:计算集合中文档的出现次数
【发布时间】:2018-02-07 00:48:40
【问题描述】:

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

书籍:

{
  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"
}

【问题讨论】:

  • 试试db.Books.aggregate( [{ $lookup: { from: "Users", localField: "id", foreignField: "fav_books", as: "bookscount" } }, { $project: { "id":1, "bookscount": { $size: "$bookscount" } } }] )
  • @SirajulHaq 我的回答有帮助吗?

标签: node.js mongodb mongoose


【解决方案1】:

如果您运行的是 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多