2017-10-17 39 views
0

試圖找出使mongoDB組可以包含尚未分組的文檔的語法,因爲它沒有通過條件。MongoDb組(如果尚未分組)

文獻看起來部分像

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

我創建互斥字符串數組,用於匹配其它基團,如

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

這是從@Neal倫恩的示例性查詢有一些定義的基團和值

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 - 完整的文檔

下面的代碼將推動整個文檔沒有別的發現時,它會插入空元素。

如果您選擇,您可以在後續階段過濾空文檔。

$addToSet將保留最多一個空文檔。

文件:

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

計數:

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