2017-10-17 41 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] 
    } 
}