2017-10-17 14 views
0

mongoDBグループを作成する際に、条件付きで合格しなかったためグループ化されていない文書を含む構文を見つけようとしています。まだグループ化されていない場合はMongoDbグループ

文献は、私は、他のグループを一致させるための相互に排他的な文字列配列を作成

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

ようにこれは、いくつかの定義された基を有する@Neal LUNNからのクエリ例であり

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

ように部分的に見えます値

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] 
     } 
    } 
    }} 
]) 

私は別のキャッチオールグループtを作成したいと思います帽子は、これらの定義されたグループはありませんでしたすべてのものをキャッチするだけでなく、私の書類を与えるだけでなく、私はそれをドリルダウンすることができますので、あなたは、コードの下に試すことができ

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

あなたは完全な文書の例を追加することができますので、我々はあなたの思考の川をたどることができれば、それは実際には非常に参考になります。さもなければ、例えばlower_ny_zipcodes等がどこから来るか明確ではない。 –

+0

ありがとう@AlexP。 lower_ny_zipcodesに使用した値の例を追加しました。 –

答えて

1

のようなものをカウントします。

all - 変数のすべての郵便番号

$$ROOTを保持する - 完全な文書

以下のコードは、他に見つからない場合は、それがnull要素を挿入する文書全体をプッシュします。

選択した場合、後続の段階で空文書をフィルタリングできます。

$addToSetは、1つのヌルドキュメントを保持します。

ドキュメント:

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

数:

"other_zips_count":{ 
    "$sum":{ 
    "$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, 1, 0] 
    } 
} 
関連する問題