MongoDB:将许多文档的 ObjectId 更新为字符串
MongoDB: update from ObjectId to string for many documents
我的结构很复杂,类似于:
{
type: "Data",
data: [
"item1": {...},
"item2": {...},
...
"itemN": {
"otherStructure": {
"testData": [
{
"values": {...}
},
{
"values": {
"importantKey": ObjectId("23a2345gf651")
}
}
]
}
}
]
}
对于这种数据结构,我想将所有这些 importantKeys
的数据类型从 ObjectId 更新为字符串。
我正在尝试类似于以下内容的查询:
db.collection.updateMany(
{type:"Data"},
{$toString: "data.$[element].otherStructure.testData.$[element].values.importantKey"},
{"data.element.otherStructure.testData.element.values.importantKey": {$type: "objectId"}})
但是所有这些尝试都没有成功。
那么,是否有适当的解决方案来更新此类数据?
更新
抱歉混淆,我的结构比较复杂:
data.content.$[element].otherStructure.testData.keys.$[element].values.$[element].meta.importantKey
所有这些 $[element]
元素表示具有元素列表的对象。
您可以使用此解决方法:
db.collection.aggregate([
{
$addFields: {
"data.content": {
$map: {
input: "$data.content",
as: "data",
in: {
otherStructure: {
testData: {
keys: {
$map: {
input: "$$data.otherStructure.testData.keys",
as: "testData",
in: {
"values": {
$map: {
input: "$$testData.values",
as: "values",
in: {
"meta": {
"importantObject": {
"importantKey": {
$toString: "$$values.meta.importantObject.importantKey"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
},
{$out:"collection"}
])
我的结构很复杂,类似于:
{
type: "Data",
data: [
"item1": {...},
"item2": {...},
...
"itemN": {
"otherStructure": {
"testData": [
{
"values": {...}
},
{
"values": {
"importantKey": ObjectId("23a2345gf651")
}
}
]
}
}
]
}
对于这种数据结构,我想将所有这些 importantKeys
的数据类型从 ObjectId 更新为字符串。
我正在尝试类似于以下内容的查询:
db.collection.updateMany(
{type:"Data"},
{$toString: "data.$[element].otherStructure.testData.$[element].values.importantKey"},
{"data.element.otherStructure.testData.element.values.importantKey": {$type: "objectId"}})
但是所有这些尝试都没有成功。
那么,是否有适当的解决方案来更新此类数据?
更新 抱歉混淆,我的结构比较复杂:
data.content.$[element].otherStructure.testData.keys.$[element].values.$[element].meta.importantKey
所有这些 $[element]
元素表示具有元素列表的对象。
您可以使用此解决方法:
db.collection.aggregate([
{
$addFields: {
"data.content": {
$map: {
input: "$data.content",
as: "data",
in: {
otherStructure: {
testData: {
keys: {
$map: {
input: "$$data.otherStructure.testData.keys",
as: "testData",
in: {
"values": {
$map: {
input: "$$testData.values",
as: "values",
in: {
"meta": {
"importantObject": {
"importantKey": {
$toString: "$$values.meta.importantObject.importantKey"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
},
{$out:"collection"}
])