MongoDB + Node.js:无法正确插入日期

时间:2011-10-31 13:26:56

标签: mongodb node.js

我一直在使用node-mongoskin连接这两个。一切都很好,直到我查询了一些“日期”字段,我认为该字段应该作为javascript的Date对象返回。但结果的类型是字符串,这对我来说很奇怪(对我来说)并且不方便。

插入看起来像这样:

var doc = {
  date: new Date(),
  info: 'Some info'
}
db.users.insert( doc, {safe: true}, function(err, res) {
  ...
});

以上结果是(没有_id字段):

{ "date" : "Mon Oct 24 2011 18:00:57 GMT+0400 (MSK)", "info": "Some info" }

然而,使用MongoDB Shell插入工作正常,除了字段类型为ISODate

> db.things.insert({ date: new Date() }); db.things.find();
{ "_id" : ObjectId("4eae9f2a34067b92db8deb40"), "date" : ISODate("2011-10-31T13:14:18.947Z") }

所以,问题是:如何将文档作为Date对象插入查询日期字段?我想要的是在数据库服务器端设置字段。我只是发送类似null-fields的东西,db-server使用默认的mongo机制为我设置这些。

插入时间戳(如native MongoDB timestamp)也是一个问题,但这并不是什么大问题。

PS:没有运气通过mongoskin和mongodb-native文档。

3 个答案:

答案 0 :(得分:13)

这可能是我的代码或mongo驱动程序中的一些错误。现在,以下工作正常:

db.collection.insert({d: new Date()});

此处描述的时间戳支持:http://mongodb.github.com/node-mongodb-native/api-bson-generated/timestamp.html

答案 1 :(得分:0)

ISODate是mongo存储日期的本地方式。我使用node-mongodb-native npm模块,并使用新的Date()惯用法来存储/检索javascript Date,就像在你的例子中一样。我不知道这是不是最近的修正,因为我在2012年开始使用node和Mongo,但使用date对我来说非常简单。

答案 2 :(得分:0)

JavaScript代码:

    collection.insert({"className"     : "models.Action", 
                       "title"         : "Email",
                       "description"   : "How are you today?",
                       "creationDate"  :  new Date("Fry, 4 May 2012 10:30:08 +0200 (CEST)"),
                       "creator"       : dbref },

在mongoDB中生成

db.action.find({"title":"Email"})
> db.action.find({"title":"Email"})
{ "className" : "models.Action", "title" : "Email", "description" : "How are you today?", "creationDate" : ISODate("2012-05-04T08:30:08Z"), "creator" : { "$ref" : "person", "$id" : ObjectId("4f995e4824ac8d68f63adf69") }, "_id" : ObjectId("4fa79e2e92c2a19a09000002") }