英文:
In Mongo how do I rename a new added field in an aggregation?
问题
当执行聚合操作时,我要添加一个新字段,该字段包含另一个对象的数据,但在最后一步,我想将该字段重命名为其他名称(原始对象我获取数据的对象)。在这种情况下,您可以使用什么操作符,当然,$replace 在这种情况下不起作用。
{
    $match: { _id: id },
},
{
    $addFields: {
        'userMetadata.active': '$user.active',
        'userMetadata.metadata': '$user.metadata',
    },
},
{ $unset: 'user' }
//这里我想将userMetadata替换为user
谢谢!
基本上,我正在寻找一个替代方案来添加以下内容:
{
    $addFields: {
        user: '$userMetadata',
    },
},
{ $unset: 'userMetadata' },
这个解决方案有效,但我不确定在处理长列表时性能如何。
更新 2:
这似乎有效,但比我想要的步骤更多:
{
    $addFields: {
        'userMeta.active': '$user.active',
        'userMeta.metadata.name': '$user.metadata.name',
        'userMeta.metadata.url': '$user.metadata.url',
        user: '$$REMOVE',
    },
},
{
    $addFields: {
        user: '$userMeta',
        userMeta: '$$REMOVE',
    },
}
英文:
When doing an aggregation I add a new field that has data from another object but in the last step I want to rename the field to something else(the original object I am getting data from)
What operator can I use to do that, of course, $replace doesn't work in this case
{
    $match: { _id: id },
},
{
    $addFields: {
        'userMetadata.active': '$user.active',
        'userMetadata.metadata': '$user.metadata',
    },
},
{ $unset: 'user' }
//Here I want to replace userMetadata with user
Thank you
Basically, I am looking for an alternative to adding this
{
    $addFields: {
       user: '$userMetadata',
    },
},
{ $unset: 'userMetadata' },
This solution works but I am not sure how performant it is over long lists
Update 2:
This seems to work, still more stages than I want
{
    $addFields: {
        'userMeta.active': '$user.active',
        'userMeta.metadata.name': '$user.metadata.name',
        'userMeta.metadata.url': '$user.metadata.url',
        user: '$$REMOVE',
    },
},
{
    $addFields: {
        user: '$userMeta',
        userMeta: '$$REMOVE',
    },
},
答案1
得分: 0
{
$addFields: {
'user': '$userMetadata',
'userMetadata': '$$REMOVE'
}
}
$unset 也接受一个数组:
{ $unset: [ 'user', '
或者使用 $project,它会移除除了 _id 之外未在列表中的所有字段:
{
$project: {
'user': '$userMetadata',
'_id': 0
}
}
英文:
You can use this:
{
    $addFields: {
        'user': '$userMetadata',
        'userMetadata': '$$REMOVE'
    }
}
$unset also accepts an array:
{ $unset: [ 'user', '<more fields>', ... ] }
Or use $project, it removes all (apart from _id) fields which are not listed:
{
    $project: {
        'user': '$userMetadata',
        '_id': 0
    }
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论