2017-10-17 22 views
0

Essayant de trouver la syntaxe pour créer un groupe mongoDB qui contiendrait les documents qui n'ont pas été regroupés car il n'a pas passé le conditionnel.Groupe MongoDb s'il n'est pas déjà groupé

document semble en partie comme

{ 
"_id" : ObjectId("value"), 
"updatedAt" : ISODate("value"), 
"zip" : "11209", 
"state" : "NY", 
"city" : "New York", 
} 

J'ai créé des tableaux de chaînes mutuellement exclusives pour faire correspondre les autres groupes, comme

east_ny_zipcodes = ["11209", "11210", "11211", ...] 
lower_ny_zipcodes = ["11212", "11213", "11214", ...] 

Ceci est une exemple de requête de @Neal Lunn avec certains groupes définis et valeurs

db.zips.aggregate([ 
    { "$group": { 
    "_id": null, 
    "lower_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", lower_ny_zipcodes ] },1,0] 
     } 
    }, 
    "east_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", east_ny_zipcodes ] },1,0] 
     } 
    }, 
    "upper_ny": { 
     "$sum": { 
     "$cond": [{ "$in": [ "$zip", upper_ny_zipcodes ] },1,0] 
     } 
    } 
    }} 
]) 

Je voudrais créer un autre attraper tout le groupe t chapeau attraperait tout ce que ces groupes définis ne l'ont pas, mais aussi me donner les documents et ne pas compter pour que je puisse percer embarqua, quelque chose comme

"other_zips":{ 
    "$push":{ 
    "$cond": [{ "$nin": [ "$zip", lower_ny, east_ny, upper_ny,...]}] 
} 
+1

Il serait effectivement très utile si vous pouvez ajouter un exemple du document complet, pour que nous puissions suivre la rivière de vos pensées. Sinon ce n'est pas clair où viennent par exemple lower_ny_zipcodes etc. –

+0

Merci @AlexP. J'ai ajouté un exemple des valeurs que j'ai utilisées pour les lower_ny_zipcodes. –

Répondre

1

Vous pouvez ci-dessous le code.

all - variable qui contient tous les codes postaux

$$ROOT - document complet

Le code ci-dessous poussera tout le document quand il ne trouve pas d'autre insérera un élément nul.

Vous pouvez filtrer le document nul dans l'étape suivante si vous le souhaitez.

$addToSet conserve au maximum un document nul.

Documents:

"other_zips_doc":{ 
    "$addToSet":{ 
    "$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, "$$ROOT", null] 
    } 
} 

Count:

"other_zips_count":{ 
    "$sum":{ 
    "$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, 1, 0] 
    } 
}