Mongo db默认时间戳

时间:2016-04-11 13:33:24

标签: mongodb mongodb-query

如何使用默认值创建日期字段,默认值应为集合中插入时的当前时间戳。

9 个答案:

答案 0 :(得分:9)

这很简单! 例如,当您使用Mongoose时,您可以将函数作为默认值传递。 然后,Mongoose会为每次插入调用该函数。

所以在你的Schema中你会做类似的事情:

 {
   timestamp: { type: Date, default: Date.now},
   ...
 }

请记住只传递函数对象本身Date.now而不传递函数调用Date.now()的值,因为这只会将Date设置为Schema创建时的值。

此解决方案适用于Mongoose& Node.Js和我希望这是你的用例,因为你没有更准确地指定它。

答案 1 :(得分:3)

您只需在插入当前collection.insert({ "date": datetime.now() } 时执行此操作。

sh "ls -l > commandResult"
result = readFile('commandResult').trim()

答案 2 :(得分:3)

  

使用 _id 获取时间戳。

为此,您实际上不需要创建用于保存时间戳记的显式字段。 mongo默认创建的对象ID即"_id"可用于实现此目的,从而为您节省了额外的冗余空间。我假设您正在使用node.js,因此可以执行以下操作来获取特定文档的创建时间:

let ObjectId = require('mongodb').ObjectID
let id = new ObjectId(<Your document _id>)
console.log(id.getTimestamp())

而且,如果您使用的是猫鼬之类的东西,请按照以下步骤操作:

let mongoose = require('mongoose')
let id = mongoose.Types.ObjectId(<Your document _id>)
console.log(id.getTimestamp())

详细了解“ _ id” here

答案 3 :(得分:1)

我只想指出,如果您希望时间戳以整数形式而不是日期格式存储,您可以这样做:

 <html>
    <header>
    </header>
    <body>
    <div id="p1">Mehrdad</div>
    <div id="p2">Dashti</div>
    <input type="text" name="p3" value="Mehrdad Dashti" id="p3">
    <script language='javascript' type='text/javascript'>
    var p1 = document.getElementById('p1').innerHTML;
    var p2 = document.getElementById('p2').outerHTML;
    var p3 = document.getElementById('p3').value;
    alert(p1);
    alert(p2);
    alert(p3);
    </script>
    </body>
    </html>

答案 4 :(得分:1)

这是没有设置默认值的命令,但它会插入具有当前时间戳记的对象:

db.foo.insert({date: new ISODate()});

这些具有相同的效果:

db.foo.insert({date: ISODate()});
db.foo.insert({date: new Date()});

请注意,没有Date()的{​​{1}}会有所不同-它不会返回new对象,而是一个字符串。

此外,它们使用的是客户端的时间,而不是服务器的时间,这可能会有所不同(因为时间设置永远不会100%精确)。

答案 5 :(得分:0)

谢谢各位朋友.. 我找到了另一种从_id字段获取时间戳的方法。 objectid.gettimestamp()从这里我们可以得到它的时间戳。

答案 6 :(得分:0)

这有点旧,但是当我使用Date.now()方法时,它没有得到当前的日期和时间,它会在你开始运行节点进程时卡住。因此,所有时间戳都将默认为启动服务器时的Date.now()。 我解决这个问题的一种方法是执行以下操作:

ExampleSchema.pre('save', function (next) {
    const instanceOfSchema = this;
    if(!instanceOfSchema.created_at){
      instanceOfSchema.created_at = Date.now();
    }
    instanceOfSchema.updated_at = Date.now();
    next();
})

答案 7 :(得分:0)

创建文档时,时间戳是可传递给构造函数或直接设置的少数可配置选项之一。

const exampleSchema = new Schema({...}, { timestamps: true });

此后,猫鼬为您的架构分配了createdAt和updatedAt字段,分配的类型为Date。

答案 8 :(得分:0)

让我们考虑使用创建日期的用户模式,我们可以使用猫鼬模式并将默认值传递为Date.now

 var UserSchema = new Schema({
       name: {type: String, trim: true},
       created: {type: Date, default: Date.now}
});

如果我们要保存时间戳而不是数字,请使用数字的数字提示

var UserSchema = new Schema({
       name: {type: String, trim: true},
       created: {type: Number, default: Date.now}
});
  

注意:-当我们在默认参数中使用Date.now()时,这将   仅将“日期”设置为创建架构时的值,   因此您将找到与其他文档中相同的日期。最好使用Date.now而不是Date.now()。