我有一个包含以下格式文档的集合。
{
"_id" : ObjectId("58d9fa5cb35630097b96acab"),
"invoice_id" : ObjectId("58d9fa5cb35630097b96acaa"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729")
},
{
"_id" : ObjectId("58d9ff77b35630097b96acb8"),
"invoice_id" : ObjectId("58d9ff77b35630097b96acb7"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729")
}
我需要使用聚合进行日期比较,但文档中的日期格式不正确。因此,我尝试使用c_date
函数为每个文档添加一个名为$addFields
且格式正确的日期值的新字段。
db.table.aggregate([
{ $addFields: { c_date : new ISODate('2017-03-29')} }
])
以上查询结果
{
"_id" : ObjectId("58d9fa5cb35630097b96acab"),
"invoice_id" : ObjectId("58d9fa5cb35630097b96acaa"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729"),
"c_date": 2017-03-29 00:00:00.000Z
},
{
"_id" : ObjectId("58d9ff77b35630097b96acb8"),
"invoice_id" : ObjectId("58d9ff77b35630097b96acb7"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729")
"c_date": 2017-03-29 00:00:00.000Z
}
我想将date
字段的格式化值添加到每个文档的c_date
字段中。如何实现呢?
答案 0 :(得分:0)
我使用同一文档中的格式化日期字段更新c_date的方法如下所示
db.table.find().forEach(function(element){
element.c_date = new Date(element.date);
db.table.save(element);
});
初始记录
{
"_id" : ObjectId("58d9fa5cb35630097b96acab"),
"invoice_id" : ObjectId("58d9fa5cb35630097b96acaa"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729"),
"c_date" : ISODate("2017-03-29T00:00:00Z")
}
{
"_id" : ObjectId("58d9ff77b35630097b96acb8"),
"invoice_id" : ObjectId("58d9ff77b35630097b96acb7"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729"),
"c_date" : ISODate("2017-03-29T00:00:00Z")
}
执行功能后
{
"_id" : ObjectId("58d9fa5cb35630097b96acab"),
"invoice_id" : ObjectId("58d9fa5cb35630097b96acaa"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729"),
"c_date" : ISODate("2017-03-28T00:00:00Z")
}
{
"_id" : ObjectId("58d9ff77b35630097b96acb8"),
"invoice_id" : ObjectId("58d9ff77b35630097b96acb7"),
"amount" : 717.6,
"date" : "2017-03-28",
"by_id" : ObjectId("58d9d6a0b35630097b96a729"),
"c_date" : ISODate("2017-03-28T00:00:00Z")
}
使用$project,您可以添加新字段或将文档中的现有字段投影到下一个管道阶段,但无法修改/更新字段在同一文档上。
我们有一个解决方法和$out,它将获取聚合管道返回的文档并将它们写入指定的集合。
希望它有帮助!