我有一个这样的文档:
{
Name : val
AnArray : [
{
Time : SomeTime
},
{
Time : AnotherTime
}
...arbitrary more elements
}
我需要将“Time”更新为日期类型(现在是字符串)
我想做一些类似的事情:
foreach record in document.AnArray { record.Time = new Date(record.Time) }
我已经阅读了有关 $ 和“点”符号的文档以及这里的几个类似问题,我尝试了以下代码:
db.collection.update({_id:doc._id},{$set : {AnArray.$.Time : new Date(AnArray.$.Time)}});
并希望 $ 能够迭代“AnArray”属性的索引,因为我不知道每个记录的长度。但我收到错误:
SyntaxError: missing : after property id (shell):1
如何使用动态值对数组嵌套值的每个成员执行更新?
最佳答案
没有直接的方法可以做到这一点,因为 MongoDB 不支持引用文档的更新表达式。此外, $
运算符仅适用于第一个匹配项,因此只要仍有 AnArray.Time
为 的字段,您就必须执行此操作$type
字符串。
但是,您可以使用您最喜欢的语言或使用 JavaScript 在 mongo 控制台中执行更新客户端:
db.collection.find({}).forEach(function (doc) {
for(var i in doc.AnArray)
{
doc.AnArray[i].Time = new Date(doc.AnArray[i].Time);
}
db.outcollection.save(doc);
})
请注意,这会将迁移的数据存储在不同的集合中。您还可以通过将 outcollection
替换为 collection
来就地更新集合。
关于json - MongoDB - 动态更新嵌套数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16939762/