如何使用默认值创建日期字段,默认值应为集合中插入时的当前时间戳。
答案 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()。