鍍金池/ 問答/數(shù)據(jù)庫/ mongo中如何根據(jù)某個字段的多個值來對另一個字段進(jìn)行統(tǒng)計?

mongo中如何根據(jù)某個字段的多個值來對另一個字段進(jìn)行統(tǒng)計?

數(shù)據(jù)庫中

{ "_id" : ObjectId("5a66ef690fe318d00bbaf106"), "sex" : "man", "name" : "a" }
{ "_id" : ObjectId("5a66ef780fe318d00bbaf107"), "sex" : "man", "name" : "b" }
{ "_id" : ObjectId("5a66ef7d0fe318d00bbaf108"), "sex" : "man", "name" : "c" }
{ "_id" : ObjectId("5a66ef820fe318d00bbaf109"), "sex" : "man", "name" : "d" }
{ "_id" : ObjectId("5a66ef8c0fe318d00bbaf10a"), "sex" : "woman", "name" : "e" }
{ "_id" : ObjectId("5a66ef8e0fe318d00bbaf10b"), "sex" : "woman", "name" : "f" }
{ "_id" : ObjectId("5a66ef910fe318d00bbaf10c"), "sex" : "woman", "name" : "g" }
{ "_id" : ObjectId("5a66ef930fe318d00bbaf10d"), "sex" : "woman", "name" : "h" }
{ "_id" : ObjectId("5a66ef950fe318d00bbaf10e"), "sex" : "woman", "name" : "i" }
{ "_id" : ObjectId("5a66ef970fe318d00bbaf10f"), "sex" : "woman", "name" : "j" }
{ "_id" : ObjectId("5a66efab0fe318d00bbaf110"), "sex" : "no_know", "name" : "z" }
{ "_id" : ObjectId("5a66efae0fe318d00bbaf111"), "sex" : "no_know", "name" : "x" }
{ "_id" : ObjectId("5a66efb00fe318d00bbaf112"), "sex" : "no_know", "name" : "c" }

期望得到的結(jié)果
===>

{"sex": "man", "sum": 4},
{"sex": "woman", "sum": 6} // 不用統(tǒng)計sex === no_know的

好像是使用group by, 找了半天沒找到對應(yīng)的。

回答
編輯回答
風(fēng)畔

又去仔細(xì)的翻了翻文檔。 自己搞定了。
具體思路: 使用聚合

  1. 匹配相應(yīng)數(shù)據(jù)
  2. 對匹配到數(shù)據(jù)進(jìn)行g(shù)roup
  3. 統(tǒng)計
db.b.aggregate([
  {$match: 
    {"sex": {$in: ["man","woman"]}}
  },// match匹配sex為 man和woman
  {$group:
    {
      _id: "$sex", // 根據(jù)什么字段分組
      count: {$sum:1} // 統(tǒng)計其他字段,并返回count: ***
    }
  }
])
2017年6月9日 02:27