【发布时间】:2017-03-30 23:17:04
【问题描述】:
我有一个包含以下格式的文档的集合。
{
"_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 字段。如何实现?
【问题讨论】:
-
我认为仍然无法在更新中引用文档本身。您必须以编程方式进行...但是,您需要进行什么样的日期比较?也许你的格式可以做到(例如,字符串比较
"2017-03-28">"2017-03-01"是true)。 -
我需要过滤掉两个日期之间的文档
-
如此简单的字符串比较应该可以工作,如果格式得到完全尊重(天和月总是“02”或“08”,而不是“2”或“8”)。否则,如果您仍想将其转换为真实的日期格式(这是最佳实践),则必须以编程方式循环整个集合,例如使用
forEach。
标签: mongodb aggregation-framework