如何在MongoDB中更改此数据结构的日期格式?

How to change date format of this data structure in MongoDB?

提问人:AlwaysJunior 提问时间:2/22/2022 最后编辑:AlwaysJunior 更新时间:2/22/2022 访问量:57

问:

我有一些用户,结构是这样的:

{
 "_id": {"$oid":"6213baaba013b7c5f1232e25"},
 "birthDate": 239290215000,
 "surname": "Yang",
 "name": "Ruby",
 "joinDate": 1534861815000,
 "children": [
    {
     "birthDate": 876749415000,
     "surname":"Yang",
     "name":"Bob"
    },
    {
     "birthDate":926753415000,
     "surname":"Yang",
     "name":"Mel",
     "joinDate":1579005015000
    }
 ],
}

我将计算用户的年龄,然后他们多久前加入?所以我尝试更改日期格式,但我只能更改父母出生日期的格式。我无法更改孩子出生日期的格式。如何更改所有日期并计算其年龄? 我的预期输出:

{
 "_id": {"$oid":"6213baaba013b7c5f1232e25"},
 "birthDate": ISODate(...),
 "surname": "Yang",
 "name": "Ruby",
 "joinDate": ISODate(...),
 "children": [
    {
     "birthDate": ISODate(...),
     "surname":"Yang",
     "name":"Bob"
    },
    {
     "birthDate": ISODate(...),
     "surname":"Yang",
     "name":"Mel",
     "joinDate": ISODate(...)
    }
 ],
}


MongoDB的

评论

0赞 1sina1 2/22/2022
请添加预期输出的样本
0赞 Sibtain Wani 2/22/2022
您能否告诉我们您正在使用哪种技术(语言)以及您用于创建此对象的代码
0赞 AlwaysJunior 2/22/2022
我不创建这个对象。为了演示一些示例,我在 MongoDBCompass 中创建了这些示例。

答:

1赞 J.F. 2/22/2022 #1

如果我理解正确,你可以试试这个:

这里的诀窍是使用$toDate

因此,要输出值而不是时间戳,您可以使用此聚合查询来更新每个对象:ISODate$mapchildren

db.collection.aggregate([
  {
    "$set": {
      "birthDate": {
        "$toDate": "$birthDate"
      },
      "joinDate": {
        "$toDate": "$birthDate"
      },
      "children": {
        "$map": {
          "input": "$children",
          "in": {
            "surname": "$$this.surname",
            "name": "$$this.name",
            "birthDate": {
              "$toDate": "$$this.birthDate"
            }
          }
        }
      }
    }
  }
])

示例在这里

此外,如果要更新数据库值(不仅要输出 ISODate,还要更改数据库中的值),可以尝试以下查询:update

db.collection.update({},
[
  {
    "$set": {
      // the same $set as before
    }
  }
])

示例在这里

评论

0赞 AlwaysJunior 2/22/2022
这个方法解决了我的问题,谢谢!
0赞 J.F. 2/22/2022
我已经使用更易于阅读和实现的$toDate进行了更新。
0赞 AlwaysJunior 2/23/2022
这种方法更容易理解。再次感谢你。如果我使用“更新”,我不会覆盖现有数据,对吗?
0赞 J.F. 2/23/2022
是的,使用文档会更新和覆盖。 仅显示数据库中没有更改数据的值,但会显示。updateaggregateupdate