我有一个看起来像这样的文档,我正在使用mongo $ map在表内投影字段并重命名键。由于某些内部复杂性,我无法使用$unwind
。
{
"Table":[
{"Lookup":{
"CreatedBy":{
"id": "User001",
"Name":"UserName"
}
}
}]
}
我期望的输出看起来像这样
{
"Table":[
{"Lookup":{
"CreatedBy":"UserName"
}
}]
}
我正在尝试使用mongo $ map实现它,但不支持
db.getCollection('TableDoc').aggregate([
{
"$project": {
"Table": {
"$map": {
"input": "$Table",
"in": {
"Lookup.CreatedAt": "$$this.Lookup.CreatedAt.Name",
}
}
}
}
}
])
是否有其他方法可以实现而不使用$ unwind
答案 0 :(得分:1)
$map
支持此功能,但不使用“虚线字段路径”。相反,您使用“绝对”对象结构:
collection.aggregate([
{ "$addFields": {
"Table": {
"$map": {
"input": "$Table",
"in": {
"Lookup": {
"CreatedBy": "$$this.Lookup.CreatedBy.Name"
}
}
}
}
}}
])
或者,如果对象中有很多字段,则可以在受支持的地方使用$mergeObjects
:
collection.aggregate([
{ "$addFields": {
"Table": {
"$map": {
"input": "$Table",
"in": {
"$mergeObjects": [
"$$this",
{
"Lookup": {
"CreatedBy": "$$this.Lookup.CreatedBy.Name"
}
}
]
}
}
}
}}
])
当示例显示的字段比问题中的示例显示的字段多时,这更有意义。