我试图限制一个集合的结果集,该集合具有“date_modified”字段,遗憾的是设置为字符串。尝试投影此字段时,我收到“无效的ISO日期”错误。代码是: -
var testDateString = "2018-03-10T00:00:000Z"
db.getCollection('updates').aggregate([
{$match:{"summary_display_tags.Source": "whatever" }},
{$project:{_id:0, source_id:"$source_id", update_date: { $concat: [ {$substr: [ "$date_modified", 0, 10 ]},"T00:00:000Z"]} }}
, {$project:{_id:0, source_id:"$source_id", update_date_string: "$update_date"
, updated_date: {$add: [new ISODate("$update_date")] }
//, updated_date2: {$add: [new ISODate(testDateString)] }
}}
])
我不明白的是,如果我使用变量字符串(即updated_date2)尝试投影,它可以正常工作但是我仍然遇到错误,试图根据投影字段字符串添加日期... < / p>
我们在3.2这里,所以我没有$ dateToString的选项。谢谢!
答案 0 :(得分:0)
为了纪念收到令人垂涎的“Tumbleweed”徽章,没有收到任何回复,我想我会发布我所做的事情,以防万一其他人偶然发现同样的问题......
由于似乎无法在聚合管道中将字符串字段转换为日期字段,因此我在php中完成了工作: -
$greatestAcceptableDate = new MongoDate(strtotime( "-14 days"));
$cursor = db.getCollection('updates').find(array("summary_display_tags.Source"=> "whatever"));
foreach ($cursor as $rec){
$recordTS = $this->buildTimestamp(strtotime(str_replace('-','/',substr($rec['date_modified'],0,10)).' 00:00:00'));
if ($recordTS < $greatestAcceptableDate){
db.getCollection('updates').remove("_id": $rec('_id'));
}
这里这样做给了我可比较的日期字段,考虑到mongo聚合查询的问题,这似乎是不可能的......