2017-08-13 71 views
0

似乎每個我發現的問題都是類似的,總是回答錯誤的「事情」。我有一個數據集,簡單的文檔(不是子文檔)。每個文件有六個字段,基本上是位字段。每個文檔至少應有一個這些字段爲真(1),但所有其他字段必須爲假(0)。我想通過最簡單的方式來判斷哪些文檔不符合這個規則,就是對每個文檔的六個字段進行求和,如果它大於1,那就失敗了,我想將文檔拉出到這些文檔的集合中所以我可以查找/查詢更多信息或只顯示它。在mongo文件中總結字段

所以,

{ 
    "_id" : ObjectId("598d5fbd8b157042cc12e5bf"), 
    "FirstName" : "fred", 
    "Hispanic" : NumberInt(1), 
    "Indian" : NumberInt(0), 
    "Asian" : NumberInt(0), 
    "Black" : NumberInt(0), 
    "Pacific" : NumberInt(0), 
    "White" : NumberInt(0), 
    "Unknown" : NumberInt(0) 
} 
{ 
    "_id" : ObjectId("598d5fbd8b157042cc12e5c0"), 
    "FirstName" : "joe", 
    "Hispanic" : NumberInt(0), 
    "Indian" : NumberInt(0), 
    "Asian" : NumberInt(0), 
    "Black" : NumberInt(0), 
    "Pacific" : NumberInt(0), 
    "White" : NumberInt(1), 
    "Unknown" : NumberInt(0) 
} 
{ 
    "_id" : ObjectId("598d5fbd8b157042cc12e5c1"), 
    "FirstName" : "margie", 
    "Hispanic" : NumberInt(1), 
    "Indian" : NumberInt(0), 
    "Asian" : NumberInt(0), 
    "Black" : NumberInt(0), 
    "Pacific" : NumberInt(0), 
    "White" : NumberInt(1), 
    "Unknown" : NumberInt(0) 
} 

,因爲如果你把所有的比賽標識符我與提供的解決方案將返回回這些領域之一,這將是「2」,而其他人將1。

Mongo還很新穎,樣本也很有幫助,但到目前爲止,我發現似乎都圍繞着總結子文檔數據來確定文檔的選擇,而我嘗試的所有內容都不會返回任何內容。就像這是一個小組(不這麼認爲)或一個項目;我總結並添加[字段]或只是總和...我有點困惑。

感謝您提供的任何幫助。

回答

0

如果我理解得很好,你需要的東西是這樣的:

db.yourCollection.aggregate(
    [ 
     { 
      $project: { 
       total: { $add: [ "$Hispanic", "$Indian", "$Asian", "$Black", "$Pacific", "$White", "$Unknown" ]} 
      } 
     }, 
     { 
      $match: { 
       "total": {"$gt": 1} 
      } 
     }, 
    ] 
);