我在集合中的 mongoDB 文档上有几个数据问题。我正在尝试编写一个 db.collection.updateAll 脚本来更新文档,但无论我做什么,我似乎都无法让它工作。
我想将 data.date 中存储的文本字符串从字符串转换:
“数据”:{ “日期”:“2019-01-07T00:00:00.000Z” }
进入 ISO 日期。
我想获取 _id 字段,并将其复制到名为“id”的字段中,我知道这可能看起来很傻,但是我们的某些报告中存在错误,我无法在其中获得代码更新几周,因此通过“id”和“_id”字段提供数据将停止服务台呼叫,直到我得到适当的修复。
我一直在尝试这个:
db.getCollection("myCollection").updateMany({},
[{
"$set": {
{ "id" : ["$_id"] } ,
"$data.date": {
"$dateFromString": {
dateString: '$data.date'
}
}
}
}]
);
但是两个字段都没有设置。当我单独运行这两个 $sets 时,我收到以下错误消息...
当我尝试设置“id”时:
db.getCollection("myCollection").updateMany(
{},
{ $set: { "id" : ["$_id"] } }
);
它只是将值设置为“$_id”,而不是从 _id 字段中获取值。
如果我尝试设置日期字段
db.getCollection("myCollection").updateMany(
{},
{ $set: { "$data.date": {
"$dateFromString": {
dateString: '$data.date'
}
} } }
);
我收到错误消息:
'$data' 中以美元 ($) 为前缀的字段 '$data' 对存储无效。
我可以在网上找到的所有示例都展示了如何设置文字值,但似乎没有一个有助于从字段本身获取新值。
答案 0 :(得分:0)
在这里试试这个它应该可以工作,因为您正在尝试添加新字段,因此请使用 $addFields
。适用于 mongoDb 4.2
db.test.updateMany({},
[ {
$addFields:{
id:'$_id',
'data.date':{$toDate:'$data.date'}
}
}
]
)