Mongodb按对象数组键查询并替换键
Mongodb查询对象数组中的键并替换键的问题是由于需要将集合(collection)中的字段properties.nickname更改为properties.nick而导致的。下面是解决该问题的方法。
首先,我们可以使用以下查询来完成任务:
db.collection.aggregate([
{
$addFields:{
"properties":{
$map:{
"input":"$properties",
"as":"property",
"in":{
$mergeObjects:[
"$$property",
{
"nick":"$$property.nickname"
}
]
}
}
}
}
},
{
$project:{
"properties.nickname":0
}
},
{
$out:"collection"
}
])
在这个查询中,我们使用了聚合操作符$addFields,$map和$mergeObjects来重命名字段。首先,我们使用$map操作符遍历properties数组,并使用$mergeObjects将新键nick添加到每个对象中。然后,我们使用$project操作符将原始的properties.nickname字段从输出中排除。最后,我们使用$out操作符将聚合输出重新写入到原始的collection中。
以下是在进行上述操作之前和之后的集合的示例数据:
**Before:**
{
"_id" : "robert",
"properties" : [
{
"kids" : 3
},
{
"nickname" : "Bob"
},
{
"age" : 45
}
]
}
{
"_id" : "alice",
"properties" : [
{
"kids" : 3
},
{
"age" : 45
}
]
}
{ "_id" : "joseph", "properties" : [ { "nickname" : "joe" } ] }
**After:**
{
"_id" : "robert",
"properties" : [
{
"kids" : 3
},
{
"nick" : "Bob"
},
{
"age" : 45
}
]
}
{
"_id" : "alice",
"properties" : [
{
"kids" : 3
},
{
"age" : 45
}
]
}
{ "_id" : "joseph", "properties" : [ { "nick" : "joe" } ] }
该方法在MongoDB 4.4版本中测试通过,但是否适用于其他版本尚不确定。
希望以上内容对您有所帮助!