gpt4 book ai didi

javascript - mongo 更新脚本 : change fields in embedded documents

转载 作者:行者123 更新时间:2023-11-30 19:25:39 24 4
gpt4 key购买 nike

我正在编写一个脚本来更新(添加和重命名)某些字段,这些字段是存储在数据库集合中的嵌入文档的一部分。

举个例子文档:

{
_id: UUID("025bda29-0d09-4923-8f7f-ea2e825be2c8"),
name: "test",
sets: [
{
"name": "1",
"values": [
{
name: "a",
value: 5
}
]
},
{
"name": "2",
"values": [
{
name: "a",
value: 3
}
]
}
]
}

这是我的脚本:

function convertGroup (group) {
for (var i = 0; i < group.sets.length; i++) {
var set = group.sets[i];
var oldValuesField = "sets." + i.toString() + ".values";
var mainValuesField = "sets." + i.toString() + "mainValues";
var additionalValuesField = "sets." + i.toString() + ".additionalValues";
db.getCollection('group').updateOne({
"_id" : group._id
}, {
$set: {
mainValuesField : set.values,
additionalValuesField : [ ]
},
$unset: {
oldValuesField: ""
}
});
}
}
db.getCollection('group').find({'sets.0.mainValues': {$exists: false}}).forEach(convertGroup);

根据文档,$rename 不适用于数组,这就是我使用 set 和 unset 的原因。

当我运行这段代码时,我得到了 group 文档中的 ma​​inValues 字段和 additionalValues 字段,而不是在设置文件。

这是我希望它变成的样子:

{
_id: UUID("025bda29-0d09-4923-8f7f-ea2e825be2c8"),
name: "test",
sets: [
{
"name": "1",
"mainValues": [
{
name: "a",
value: 5
}
],
"additionalValues": [ ]
},
{
"name": "2",
"mainValues": [
{
name: "a",
value: 3
}
],
"additionalValues": [ ]
}
]
}

任何人都可以向我解释为什么会发生这种情况以及我如何才能按照我想要的方式进行这项工作吗?

最佳答案

我设法通过像这样重写脚本来修复它:

function convertGroup(group) {

group.sets.forEach(function (set) {
if (!set.mainValues) {
$set : {
set.mainValues = set.values
}
}

if (!set.additionalValues) {
$set : {
set.additionalValues = []
}
}
});
db.getCollection('group').update({'_id': group._id}, group);
}
db.getCollection('group').find({'sets.mainValues': {$exists: false}}).forEach(convertGroup)

不同之处主要是不使用符号 'sets.[index].values' 而是直接在 json 上编辑它并使用 'update' 而不是 'updateOne'

关于javascript - mongo 更新脚本 : change fields in embedded documents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56948756/

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