我试图在“ss_characteristics”数组中将键“ssfollow_sinusitis”的每个示例重命名为“sinusitis”,同时仍然保留值。
我试图使用mongoose实现这一点,但没有运气,因为似乎$rename
运算符不支持在MongoDB中遍历嵌套数组。
下面是我正在查询的表的示例,以及我尝试的方法的示例,该方法不起作用:
await Form.updateMany(
{ 'ss_characteristics.$.ssfollow_sinusitis': { $exists: true } },
{ $rename: { 'ss_characteristics.$.ssfollow_sinusitis': 'ss_characteristics.$.sinusitis' } }
);
const all_forms = await Form.find({})
// console.log(all_forms) will give the below.
[
{
_id: new ObjectId("6413adfdea76122e6fcdefc6"),
general_details: {
name: 'YEYO Rae',
},
ss_characteristics: [
{
sinusitis: 'No',
_id: new ObjectId("6450fb3d4155fbd24cb69a73")
},
{
sinusitis: 'No',
_id: new ObjectId("6450fba24155fbd24cb69ab0")
}
]
},
{
_id: new ObjectId("6413adfdea76122e6fcdefc6"),
general_details: {
name: 'OSLAVI Hig',
},
ss_characteristics: [
{
ssfollow_sinusitis: 'No',
_id: new ObjectId("6450fb3d4155fbd24cb69a73")
},
{
ssfollow_sinusitis: 'No',
_id: new ObjectId("6450fba24155fbd24cb69ab0")
}
]
}
]
1条答案
按热度按时间vu8f3i0k1#
$rename
无法重命名数组中文档的字段。可以使用Updates with Aggregation Pipeline$set
阶段:$set
ss_characteristics
文档,其中新文档从其自身Map。Map逻辑为:为每个文档创建一个sinusitis
字段,并将其与当前文档($$this
)合并($mergeObjects
)。$unset
阶段:删除ss_characteristics
数组中每个文档的过时字段ssfollow_sinusitis
。结果: