【发布时间】:2016-09-12 09:54:48
【问题描述】:
假设我在 MongoDB 集合中有以下文档(这只是我的真实数据的简化版本):
/* 1 */
{
"_id" : "objectives/core/1001",
"tmp" : [
{
"name" : "analysisType"
},
{
"name" : "sampleFormat"
}
]
}
/* 2 */
{
"_id" : "objectives/core/1003",
"tmp" : [
{
"name" : "analysisType"
}
]
}
/* 3 */
{
"_id" : "objectives/core/1004",
"tmp" : []
}
请注意,最后一个文档有空的tmp 数组。
我使用 Mongo 3.2 编写了一个聚合查询,它“展开”tmp 并保留空数组:
db.entities.aggregate({ "$unwind" : { path: "$tmp", preserveNullAndEmptyArrays: true } } );
这是我的(期望的)输出:
/* 1 */
{
"_id" : "objectives/core/1001",
"tmp" : { "name" : "analysisType" }
}
/* 2 */
{
"_id" : "objectives/core/1001",
"tmp" : {
"name" : "sampleFormat"
}
}
/* 3 */
{
"_id" : "objectives/core/1003",
"tmp" : { "name" : "analysisType" }
}
/* 4 */
{ "_id" : "objectives/core/1004" }
但这不适用于旧版本的 MongoDB,因为它们不支持 preserveNullAndEmptyArrays 属性 - 他们的 常规 unwind 操作(没有该属性)不会生成文档编号 4从上面的清单。你有什么想法如何使用 Mongo3.0 实现这个吗?
【问题讨论】:
标签: mongodb aggregation-framework