【问题标题】:mongodb date insert like using mongoosemongodb 日期插入,如使用 mongoose
【发布时间】:2016-01-21 03:06:04
【问题描述】:

我在 mongodb 中插入批量记录。我正在使用本机数据库驱动程序来执行此操作,因为性能要高得多。在我的应用程序的其他地方,我正在使用猫鼬。我遇到的问题是 mongoose 将日期转换为不同的格式,而 mongodb 本机只是将其插入为自 1970 年以来的秒数。因此,以后基于该日期的 mongoose 查询不起作用。

这是我的猫鼬模式:

var MySchema = new Schema({
  name              : { type: String, required: true },
  updatedAt         : Date
});

还有我的 mongo db 批量插入:

var newRec = { 
    name        : entry.Name, 
    updatedAt   : Date.now
};
newRecords.push(newRec);

MySchema.collection.insert(newRecords, function(err, newRecs) {
            res.json(newRecs.ops);
          });

这会在数据库中产生:

{
    "_id": {
        "$oid": "562818ecf24d540f0053a38d"
    },
    "name": "Cool Record",
    "updatedAt": 12312423512
}

如果它通过 Mongoose 运行,它会产生:

{
    "_id": {
        "$oid": "561fd90285b5e73f5626f74e"
    },
    "name": "Cool Record",
    "updatedAt": {
        "$date": "2015-10-20T20:01:17.553Z"
    }
}

如果通过猫鼬,这样的查询效果很好:

MySchemda.find({ updatedAt : { $gt: lastSynced }}).exec();

但不要以其他方式工作。

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    Date.now 是一个数字,表示自 1970 年以来的毫秒数。虽然它在概念上表示日期,但实际上并不是 Date

    var x = Date.now;
    typeof x;
    // "number"
    

    您需要将架构切换为:

    var MySchema = new Schema({
        name              : { type: String, required: true },
        updatedAt         : Number
    });
    

    或者,您可以使用:

    var newRec = {
        name: entry.Name,
        updatedAt: new Date()
    }
    

    并保持您的架构不变。

    【讨论】:

      【解决方案2】:

      你可以这样使用它: 定义日期类型和默认值,然后创建一个可以定义为架构的变量,使用year : new Date 这将有助于设置日期。

      var songSchema = new mongoose.Schema({
      name : String,
      year : {type : Date, default : Date.now}, 
      singer : String,
      });
      var song  = mongoose.model("song", songSchema);
      var xyz= new song({
      name : "abcd",
      year :new Date,  // to set the date first set new Date
      singer : "aabbccdd",
      });
      

      您可以使用 setDate , setMonth , setYear 方法来解决问题。在对象 year 下定义了更多方法。您可以在 mongoose 的文档中进一步了解。

      xyz.save(function(err, songs){
      if(err) 
      winston.log("Something is wrong"+ "   "+ err);
      else {
      songs.year.setDate(03); 
      songs.year.setMonth(03);
      songs.year.setYear(2015);
      winston.log(songs);
      }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-14
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 2017-12-22
        • 2020-09-27
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多