转换所有数组元素' ISODates到mongo 3.4(而不是3.6)中的等效JSON文档

时间:2017-12-21 16:49:35

标签: mongodb mongodb-query

假设我的个人资料集合如下所示:

{
_id : ObjectId("59cb823013e825455b1c1a04"),
positions : 
[
    {
        "uid" : 5,
        "startDate" : ISODate("2016-11-30T23:00:00.000Z")
    },
    {
        "uid" : 6,
        "startDate" : ISODate("2011-10-31T23:00:00.000Z")
    }
]
}

我想将位置中的所有startDate字段转换为以下格式:

{
year : 2012,
month : 11,
day : 10
}

我尝试运行此查询:

db.profile.find({})
  .forEach(function (doc) {
    doc.positions.forEach(function (position) {
        var year = { $year: position.startDate };
        var month = { $month: position.startDate };
        var day = { $day: position.startDate };
        position.startDate = {
            year : year,
            month : month;
            day : day;
            };
    });
    db.profile.save(doc);
  });

但我收到此错误: 错误:字段名称无法以$ [$ year]

开头

有关此工作的任何帮助吗?

1 个答案:

答案 0 :(得分:0)

使用以下方法解决此问题:

db.profile.find({})
  .forEach(function (doc) {
    doc.positions.forEach(function (position) {
        var year = position.startDate.getFullYear();
        var month = position.startDate.getMonth();
        var day = position.startDate.getDay();
        position.startDate = {
            year : year,
            month : month;
            day : day;
            };
    });
    db.profile.save(doc);
  });