【发布时间】:2019-07-09 21:13:36
【问题描述】:
我正在编写一个脚本来更新(添加和重命名)某些字段,这些字段是存储在 db 集合中的嵌入文档的一部分。
举个例子:
{
_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 文档中获得了 mainValues 字段和 additionalValues 字段,而不是在set 文件。
这就是我想要的样子:
{
_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": [ ]
}
]
}
谁能向我解释为什么会发生这种情况以及我如何才能按照我想要的方式进行这项工作?
【问题讨论】:
-
很抱歉进行了多次编辑,但我错过了一些代码布局
-
您的示例文档,没有 mainValues 或 oldValues。你是怎么设置和取消设置的?
-
oldValuesField 只是一个变量名,与集合中文档的“值”字段相关。 mainValues 是它在新版本中所必须的
标签: javascript mongodb document