试图找出一个语法,使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 Lunn的示例查询,其中包含一些已定义的组和值
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]
}
}
}}
])
我想创建另一个捕获所有组,这些组将捕获这些定义的组没有的东西,但也给我文档,而不仅仅是计数,所以我可以深入研究它,如
"other_zips":{
"$push":{
"$cond": [{ "$nin": [ "$zip", lower_ny, east_ny, upper_ny,...]}]
}
答案 0 :(得分:1)
您可以尝试以下代码。
all
- 包含所有邮政编码的变量
$$ROOT
- 完整文件
以下代码将在未找到时推送整个文档,否则将插入null元素。
如果选择,可以在后续阶段过滤空文档。
$addToSet
将保留最多一个空文档。
文件:
"other_zips_doc":{
"$addToSet":{
"$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, "$$ROOT", null]
}
}
计数:
"other_zips_count":{
"$sum":{
"$cond": [{ $not: [ { $in: [ "$zip", all ] } ] }, 1, 0]
}
}