无法识别MongoLab TTL BSON日期对象

时间:2014-08-06 17:53:06

标签: mlab

通过shell将文档插入集合时:

db.collection.insert({"createdAt": new Date()})

它会创建一个类似于:

的文档
{
    "_id": { "$oid": xxxxxxxxxxxxxx }
    "createdAt": { "$date": xxxx-xx-xxTxx:xx:xx.xxxZ }
}

执行索引并在文档过期时成功删除文档(目前为10秒后)。虽然通过restful api调用创建文档时,mongolab似乎不会将键值对识别为BSON日期类型,但它不会被删除。在Java中通过HTTP POST创建的文档与上面显示的文档相同。虽然当我通过mongolab网站编辑文档(未进行任何更改)并按保存时,它将作为BSON日期类型处理,然后在应用TTL时按预期删除。我假设这是因为当我进行POST时,正文被序列化为JSON,然后文档被创建为JSON。虽然如果文件看起来像BSON并闻起来像BSON,为什么mongolab不会把它当作BSON对待,直到mongolab自己接触它?

1 个答案:

答案 0 :(得分:1)

你解决了这个问题吗?我遇到了完全相同的问题。但我是从JavaScript调用REST API。

但是当我看到你对象的格式时,我注意到" $ date"我的文件中缺少部分内容。我使用了JSON对象的格式,如下所示:

var doc =
{
  createdAt: new Date()
}

然后我改为:

var doc =
  {
    createdAt: {
      $date: new Date()
    }
  }

TTL索引现在可以正常工作并删除过期的文档。因此,请检查您通过REST API创建的文档的格式。