gpt4 book ai didi

MongoDB 聚合查询 - 重命名从嵌入式文档中返回的字段

转载 作者:可可西里 更新时间:2023-11-01 09:08:56 25 4
gpt4 key购买 nike

我目前正在使用聚合运算符返回具有嵌入(子)文档数组的文档。我想重命名数组的字段名称,并重命名数组的嵌入文档中的字段名称。

例如,对于投影,我想将数组从“friends”重命名为“buddies”,我还想将嵌入文档中的字段从“name”重命名为“nickName”。我可以在聚合操作中执行此操作吗?如果可以,如何操作?

这是源文档的示例:

[
{
_id: ObjectID,
name: 'Matthew',
friends: [
{name: 'Slim', age: '32'},
{name: 'buba', age: '36'}
]
}
]

结果应该是这样的:

[
{
_id: ObjectID,
name: 'Matthew',
buddies: [
{nickName: 'Chris', age: '32'},
{nickName: 'Jim', age: '36'}
]
}
]

提前感谢您的帮助。

最佳答案

有几种方法可以解决这个问题,但这在很大程度上取决于您的 MongoDB 版本。 2.6 及更高版本的更新版本支持 $map您可以在 $project 中使用的运算符做你想做的事:

db.friend.aggregate([
{ "$project": {
"name": 1,
"buddies": {
"$map": {
"input": "$friends",
"as": "el",
"in": {
"nickName": "$$el.name",
"age": "$$el.age"
}
}
}
}}
])

在以前的版本中,您将使用 $unwind使用数组元素并通过 $group 重新构造:

db.collection.aggregate([
{ "$unwind": "$friends" },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"buddies": {
"$push": {
"nickName": "$friends.name",
"age": "$friends.age"
}
}
}}
])

第一种形式的效率更高一些,因为您不会对数组内容进行反规范化,也不会在管道中生成更多文档进行处理。

关于MongoDB 聚合查询 - 重命名从嵌入式文档中返回的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com