英文:
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
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论