子文档的总阵列成单一的文件

我的文档如下所示(忽略了这个问题的时间点):子文档的总阵列成单一的文件

{ 

"_id": "xyz-800",

"site": "xyz",

"user": 800,

"timepoints": [

{"timepoint": 0, "a": 1500, "b": 700},

{"timepoint": 2, "a": 1000, "b": 200},

{"timepoint": 4, "a": 3500, "b": 1500}

],

"groupings": [

{"type": "MNO", "group": "<10%", "raw": "1"},

{"type": "IJK", "group": "Moderate", "raw": "23"}

]

}

我可以拼合(也许不是正确的术语),因此groupings是一个单一的文件内。我想结果是这样的:

{ 

"id": "xyz-800",

"site": "xyz",

"user": 800,

"mnoGroup": "<10%",

"mnoRaw": "1",

"ijkGroup": "Moderate",

"ijkRaw": "23"

}

在现实中我想mnoGroupmnoRaw属性如果属性groupings.type = "MNO"存在与否要创建不管。与ijk属性相同。

回答:

您可以使用$arrayElemAt读取由索引分组数组中的第一个项目阶段和$ifNull在最后阶段工程项目可选值。 Litte详细,但会看看我能做些什么。

db.groupmore.aggregate({ 

"$project": {

_id: 1,

site: 1,

user: 1,

mnoGroup: {

$arrayElemAt: ["$groupings", 0]

},

ijkGroup: {

$arrayElemAt: ["$groupings", -1]

}

}

}, {

"$project": {

_id: 1,

site: 1,

user: 1,

mnoGroup: {

$ifNull: ["$mnoGroup.group", "Unspecified"]

},

mnoRaw: {

$ifNull: ["$mnoGroup.raw", "Unspecified"]

},

ijkGroup: {

$ifNull: ["$ijkGroup.group", "Unspecified"]

},

ijkRaw: {

$ifNull: ["$ijkGroup.raw", "Unspecified"]

}

}

})

样本输出

{ "_id" : "xyz-800", "site" : "xyz", "user" : 800, "mnoGroup" : "<10%", "mnoRaw" : "1", "ijkGroup" : "Moderate", "ijkRaw" : "23" } 

{ "_id" : "ert-600", "site" : "ert", "user" : 8600, "mnoGroup" : "Unspecified", "mnoRaw" : "Unspecified", "ijkGroup" : "Unspecified", "ijkRaw" : "Unspecified" }

以上是 子文档的总阵列成单一的文件 的全部内容, 来源链接: utcz.com/qa/264058.html

回到顶部