更新字段以进一步嵌套在文档中 - MongoDB/Node
Update a field to be further nested in a document - MongoDB/Node
我正在用 migrate-mongo and the Node driver for Mongo 编写一个迁移,它们都没有那么好的文档。我正在尝试获取一个字段并将其进一步嵌套。这是原始结构的示例:
{
"_id": {"$oid":"xxxxxxxx"},
"module": "lalala",
"settings": {
"yAxis": {
"title": {
"text": "TITLE"
}
}
}
我想获取 yAxis 字段及其内容并将其嵌套在“highcharts”字段下,因此它最终如下所示:
"settings": {
"highcharts": {
"yAxis": {
"title": {
"text": "TITLE"
}
}
}
}
我看到了这个 并希望我可以使用那个 $ 运算符来获取 yAxis 内容并将它们放回原处,但这是行不通的。 (yAxis 字段现在只读取字符串文字 '$settings.yAxis')
async up(db) {
const panels = db.collection('panels');
await panels.updateMany({module: 'lalala'},
{$set: {'settings.highcharts.yAxis': '$settings.yAxis'}});
await panels.updateMany({module: 'lalala'},
{$unset: {'settings.yAxis': ''}});
我还想也许我应该遍历文档,将它们解析为 JSON 并获取 yAxis 的内容,然后将其插入到新的 'highcharts' 字段中,但这是在 await 中使用forEach 不起作用。
理想情况下,我正在执行此异步操作,以便我可以在一次迁移中执行多项操作。否则,我将不得不在一次迁移中设置新的 'highcharts' 字段,并在另一次迁移中取消设置旧的 'yAxis',如果一个失败而另一个失败,这可能会导致问题。
有点卡在这里,任何帮助。谢谢!
好的,我已经很接近了,我不明白为什么,但是我需要用括号括起我的 $set。
await panels.updateMany({module: 'lalala'},
[ {$set: {'settings.highcharts.yAxis': '$settings.yAxis'}} ] );
我正在用 migrate-mongo and the Node driver for Mongo 编写一个迁移,它们都没有那么好的文档。我正在尝试获取一个字段并将其进一步嵌套。这是原始结构的示例:
{
"_id": {"$oid":"xxxxxxxx"},
"module": "lalala",
"settings": {
"yAxis": {
"title": {
"text": "TITLE"
}
}
}
我想获取 yAxis 字段及其内容并将其嵌套在“highcharts”字段下,因此它最终如下所示:
"settings": {
"highcharts": {
"yAxis": {
"title": {
"text": "TITLE"
}
}
}
}
我看到了这个
async up(db) {
const panels = db.collection('panels');
await panels.updateMany({module: 'lalala'},
{$set: {'settings.highcharts.yAxis': '$settings.yAxis'}});
await panels.updateMany({module: 'lalala'},
{$unset: {'settings.yAxis': ''}});
我还想也许我应该遍历文档,将它们解析为 JSON 并获取 yAxis 的内容,然后将其插入到新的 'highcharts' 字段中,但这是在 await 中使用forEach 不起作用。
理想情况下,我正在执行此异步操作,以便我可以在一次迁移中执行多项操作。否则,我将不得不在一次迁移中设置新的 'highcharts' 字段,并在另一次迁移中取消设置旧的 'yAxis',如果一个失败而另一个失败,这可能会导致问题。
有点卡在这里,任何帮助。谢谢!
好的,我已经很接近了,我不明白为什么,但是我需要用括号括起我的 $set。
await panels.updateMany({module: 'lalala'},
[ {$set: {'settings.highcharts.yAxis': '$settings.yAxis'}} ] );