2017-08-13 1 views
0

On dirait que chaque question que je trouve similaire me répond toujours par la «chose» fausse. J'ai un ensemble de données, des documents simples (pas de sous-documents). Chaque document a six champs qui sont essentiellement des champs de bits. Chaque document doit avoir au moins un de ces champs vrai (1) mais tous les autres doivent être faux (0). Je me suis dit que la façon la plus simple de déterminer quels documents ne respectaient pas cette règle consistait à additionner les six champs pour chaque document et s'il est supérieur à 1, c'est un échec et je veux extraire le document dans une collection de ces documents donc je peux trouver/interroger pour plus d'informations ou simplement l'afficher.Résumer des champs dans un document mongo

Ainsi,

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

la solution revenir un de ces champs parce que si vous additionnez tous les identifiants de course je fournis avec, il sera « 2 » tandis que les autres seront 1. Encore un peu nouveau sur Mongo et les exemples ont été utiles mais jusqu'ici tout ce que j'ai trouvé semble tourner autour de la sommation des données de sous-document pour déterminer la sélection d'un document et tout ce que j'essaie ne renvoie rien. Comme est-ce un groupe (ne le pense pas) ou un projet; Dois-je additionner et ajouter [champs] ou juste somme ... Je deviens un peu confus.

Merci pour toute aide que vous pouvez fournir.

Répondre

0

Si je comprends bien, vous avez besoin de quelque chose comme ceci:

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