mongodb - MongoDB Shell - 将新字段添加到现有字段中的所有文档
问题描述
我想为集合中的所有现有文档创建一个 TTL,我们在所有文档中都有一个字符串类型的字段 -"OrigDate": "2020-03-24"
现在我想根据这个字段添加另一个提交的“updatedAt”,我在 mongo shell 中尝试了以下但没有工作 -
db.SHOP.update(
{},
{
$set:{
"updatedAt": { "$toDate": "$OrigDate"}
}
},
false,
true
)
这给出了以下例外 - 'updatedAt.$toDate' 中的美元 ($) 前缀字段 '$toDate' 对存储无效
请帮忙
解决方案
使用聚合从现有字段值生成新字段,然后将其更新到集合中。您必须使用聚合来引用集合文档中的现有字段。
db.test.aggregate( [
{ $addFields: { updatedAt: { "$toDate": "$OrigDate"} } }
] ).forEach( doc => db.test.updateOne( { _id: doc._id }, { $set: { updatedAt: doc.updatedAt } } ) )
以下更新接受一个聚合管道来指定要应用于集合文档的修改:使用聚合管道更新。请注意,此功能仅适用于 MongoDB 版本 4.2 或更高版本。
db.test.updateMany(
{ },
[
{ $set: { updatedAt: { "$toDate": "$OrigDate"} } }
]
)
推荐阅读
- kotlin - Bytebuddy:方法拦截在 Kotlin 中不起作用
- android - 如何在一个月后自动删除 SharedPreferences?
- phpmailer - PHPMailer 似乎没有正确安装:未捕获的错误:类 'PHPMailer\PHPMailer\PHPMailer
- kubernetes-helm - 我们可以在分蘖而不是掌舵客户端中进行图表安装吗?
- amazon-web-services - 如何知道我的实例是否会在 ec2 中终止?
- android - 如何修复 android studio 3 中的“找不到符号类 Nullable”错误
- stripe-payments - Stripe:有没有一种元素可以免费创造客户?
- javascript - 在 Spark AR studio 中获取像素屏幕尺寸(适用于 Facebook)
- xml - 如何从 xml 文件构建 xsd?
- azure-application-insights - 启动 Application Insights Agent for Java 时出错