【问题标题】:MongoDB + Node.js: unable to insert date properlyMongoDB + Node.js:无法正确插入日期
【发布时间】:2011-10-31 13:26:56
【问题描述】:

我一直在使用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 对象?我想要的是在数据库服务器端设置字段。我只是发送空字段之类的东西,然后 db-server 使用默认的 mongo 机制为我设置这些内容。

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

PS:通过 mongoskin 和 mongodb-native docs 运气不好。

【问题讨论】:

  • 我认为,日期问题随着更新而消失(不确定是谁:mongo 的驱动程序)。仍然想知道如何正确插入时间戳。

标签: mongodb node.js


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。附带说明一下,在插入 MongoDB 数据库时不要使用new Date().toISOString()(而不是只使用new Date()),因为MongDB 已经为您进行了转换,使用.toISOString() 将使.find( ) 数据库上的运算符或 $gte 运算符失败
【解决方案2】:

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

【讨论】:

  • 不要在插入 MongoDB 数据库时使用new Date().toISOString()(而只是使用new Date()),因为 MongDB 已经为您完成了转换并且使用 .toISOString() 将使数据库上的 .find() 运算符或 $gte 运算符失败
  • @YiXiangChong:如何从mongodb获取匹配的日期文档?
  • 嗨@PappaS 这是从 mongodb 获取匹配日期文档的一种方法:``` var today = new Date("2020-06-16"); var明天=新日期(“2020-06-17”); var out = "documents_today"; agg_query = [ { $match: { _timestamp: {$gte: 今天, $lt: 明天}}, }, { $out: out } ]; db.documents_collection.aggregate(agg_query); db.documents_today.find().count(); ```
【解决方案3】:

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") }

【讨论】:

  • 谢谢。但正如我在问题评论中指出的那样,日期插入是可以的。但是如何插入时间戳(在mongodb format 中)。我想这可以通过collection.insert( {ts: new mongoskin.Timestamp()} ) 来完成。
猜你喜欢
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多