json - MongoDB - 动态更新嵌套数组中的对象

标签 json mongodb insert-update

我有一个这样的文档:

{
  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/

相关文章:

mysql - 如果它已经在表中,我如何强制 INSERT 插入到具有唯一键的表中?

jquery - 未捕获的语法错误 : Unexpected token e

java - JSONAssert.assertEquals(objActual, jObject, true) 未按预期工作

mongodb - MongoDB中两个字段的唯一约束

mysql - 在单个查询中插入多行并更新现有的

php - 如何将 3 个数组插入到 2 个 MySql 表中?

php - 如何将 json_encode 结果中的每个元素显示为 PHP 表格

javascript - 对象序列化到indexedDB和JSON.stringify的效率

javascript - 有没有办法在 JavaScript 中有条件地缩短对象的成员函数?

node.js - Openshift mongodb 连接 url