因为在MongoDB中没有办法过滤子文档(参考:如何使用MongoDB选择子文档)
MongoDB中是否有其他方法/方法可以快速删除/过滤没有给定字段、没有下例中的子文档
字段的字段?
是唯一的方法来做到这一点,通过处理mongoDB外部的结果,并过滤掉所有空文档?
(想象一个情况,当你有一千个具有不同模式的subdocs。我做了一个. search(),得到了1000个子文档,但是900是空的。我只是想得到100,所以我不总是必须处理和删除MongoDB外面的空的。)
例如,您有一个JSON,它位于名为monday的集合中:
{
document : [
{
subdocument : "Hello World"
},
{
subdocument : "Hello Moon"
},
{
another_field: "Hello Sun"
}
]
}
然后进行此查询
db.monday.find ({},{_id: 0,"document.subdocument": 1})
结果将是:
{ "document" : [
{ "subdocument" : "Hello World" },
{ "subdocument" : "Hello Moon" },
{ }
] }
您可以看到another_field仍然返回,尽管为空。
我相信在这种情况下会返回空字段,因为文档是一个数组,Mongodb不想更改任何元素的数组索引。
您可以使用聚合框架获取子文档数组:
db.monday.aggregate(
[
{ $match:
{'document.subdocument' :
{ $exists: 1 }
}
},
{ $unwind: "$document" },
{ $match:
{'document.subdocument' :
{ $exists: 1 }
}
},
{ $project: { subdocument: "$document.subdocument", _id: 0 } }
])
产量:
[
{
"subdocument" : "Hello World"
},
{
"subdocument" : "Hello Moon"
}
]
第一个$match
不是必需的,如果有很多文档没有您要查找的任何子文档,它只会加快处理速度。
我正在查看MongoDB在和投影上的留档。我试图弄清楚如何只返回投影数组字段的子集,但我似乎无法弄清楚。 相关帖子: > 我没有试图从mongob聚合框架中执行$片-获取嵌套数组的第一个文档字段。 我也没有尝试从mongo projection中的仅返回数组值展平子文档,因为我仍然需要顶部文档中的一些字段。 假设我在集合中有以下文档: 我想要执行的查询是: 我希望它只返回数组中为的子文档下的。例如
如何解决这个问题?
MongoDB 中的投影即查询指定的字段,而不是直接查询文档的全部字段。比如说某个文档中有 5 个字段,而我们只需要其中的 3 个字段,那么就可以使用 MongoDB 中的投影来指定需要查询的 3 个字段。 在《 MongoDB查询文档》一节中我们介绍的 find() 方法,在使用 find() 方法时,如果不设置其中的第二个参数,那么在查询时将返回文档中的所有字段,想要限制要查询的字段,您就需要
如果数据源包含许多数据或字段,你可能会发现将数据或字段限制为仅所需的内容会更为容易,从而可以简化数据选择。 筛选数据 筛选窗格让你可以方便地创建和应用为数据指定的筛选条件。在工具栏点击 “筛选”来启用筛选窗格。 若要添加一个新的条件到准则,只需简单地点击 。如果你需要在括号内添加条件,点击 。 【提示】若要在现有的条件添加括号,只需简单地右击已选择的条件并选择“使用括号分组”。若要移除括号,请右击
如果数据源包含许多数据或字段,你可能会发现将数据或字段限制为仅所需的内容会更为容易,从而可以简化数据选择。 筛选数据 若要添加一个新的条件到准则,只需简单地点击 来启用筛选窗格。 若要添加一个新的条件到准则,只需简单地点击 。如果你需要在括号内添加条件,点击 。 【提示】若要在现有的条件添加括号,只需简单地按住 Control 键并点按已选择的条件,然后选择“使用括号分组”。若要移除括号,请按住
如果数据源包含许多数据或字段,你可能会发现将数据或字段限制为仅所需的内容会更为容易,从而可以简化数据选择。 筛选数据 筛选窗格让你可以方便地创建和应用为数据指定的筛选条件。在工具栏点击 “筛选”来启用筛选窗格。 若要添加一个新的条件到准则,只需简单地点击 。如果你需要在括号内添加条件,点击 。 【提示】若要在现有的条件添加括号,只需简单地右击已选择的条件并选择“使用括号分组”。若要移除括号,请右击