我正在寻找这个,但我找不到任何有用的解决我的情况.我想要的是在聚合期间以几秒为单位获取MongoDB ISODate的unix时间戳.问题是我可以从ISODate中获取时间戳,但它是以毫秒为单位.所以我需要减少那些毫秒.我试过的是:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试从'md'var中获取时间戳,并将此时间戳与'01'和'id'数字连接起来.上面的代码给出:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "2014-02-10T16:20:56011141"
}
Run Code Online (Sandbox Code Playgroud)
然后我改进了命令:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Run Code Online (Sandbox Code Playgroud)
现在我得到:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1392049256000011141"
}
Run Code Online (Sandbox Code Playgroud)
我真正需要的是1392049256011141所以没有3额外的000.我尝试了$减法:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$divide: [{$subtract: ["$md", new Date('1970-01-01')]}, 1000]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}} …
Run Code Online (Sandbox Code Playgroud) mongodb unix-timestamp isodate mongodb-query aggregation-framework
我将时间序列数据存储在mongodb数据库中,其中一个字段是ISODate对象.我正在尝试检索ISODate对象的分钟和秒值为零的所有项目.也就是说,所有在圆形小时都有时间戳的对象.
有没有办法做到这一点,或者我需要为每小时创建单独的领域,分,秒,直接为他们做的查询,如发现({"分":0,"第二":0})?
谢谢!
我正在使用joda时间来格式化我的ISO Date输入字符串,但是我得到一个异常,我的ISO日期格式不正确:
Invalid format: "2014-06-20T11:41:08+02:00" is malformed at "+02:00"
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
val formatter: DateTimeFormatter = ISODateTimeFormat.dateTime.withZone(DateTimeZone.getDefault)
val date: DateTime = formatter.parseDateTime("2014-06-20T11:41:08+02:00")
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
这是关于新的MongoDB C ++驱动程序(不是旧版驱动程序)。我可以这样插入文档:
value Value = document{}
<<"Key" <<"Value"
<<finalize;
cxxClient["db"]["collection"].insert_one(Value.view());
Run Code Online (Sandbox Code Playgroud)
上面的代码插入一个文档,该文档具有值为'Value'的1个字段'Key'。我可以插入字符串,整型,浮点型...,但无法弄清楚如何插入ISODate。新的MongoDB C ++驱动程序应在文档中附带更多示例。
我在使用 Java 搜索 mongodb 中的 ISODate 字段时遇到问题。我想找到完全匹配的日期。
以下是我查询第一个集合并获取 ISODate 字段“Timestamp”的方法。一旦我得到这个日期,我想搜索具有相同“时间戳”值的另一个集合。
FindIterable<Document> docList = thermalComfortCollection.find();
for(Document doc: docList) {
String ts = doc.get("Timestamp").toString();
System.out.println(ts);
Run Code Online (Sandbox Code Playgroud)
...
我正在格式化 ISODate,因为它以我想要搜索的不同格式返回日期。因此,我将其转换为这种模式“yyyy-MM-dd HH:mm:ss”
final DateTimeFormatter inputFormat =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
// The parsed date
final ZonedDateTime parsed = ZonedDateTime.parse(ts, inputFormat);
// The output format
final DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String date = outputFormat.format(parsed);
Run Code Online (Sandbox Code Playgroud)
我找不到如何为 ISODate 类型编写精确匹配语句,因此我同时输入 gte 和 lte 条件来获得精确匹配..!
BasicDBObject query = new BasicDBObject("Timestamp", //
new BasicDBObject("$gte", date).append("$lte", date));
System.out.println(query);
Run Code Online (Sandbox Code Playgroud)
并且查询不起作用。你能给我任何评论我的代码的哪一部分是错误的吗?
当我从mongoDB导出数据时,我获取以下文件:
除了ISODate的日期之外,mongoDB中的所有内容都是字符串.
123@123.com,sha1:64000:18:BTJnM903gIt5FNlSsZIRx1tLC9ErPJuB:9YVs800sgRPr1aaLj73qqnJ6,123,123,123@123.com,2017-04-28T09:20:07.480Z,cus_AYcVXIUf68nT52
Run Code Online (Sandbox Code Playgroud)
如果我将此文件导入MongoDB,它会将每个值导入为String值.我需要将日期解析为Date格式,其余的可以是字符串.
我已经看到MongoImport --columnsHaveTypes有一个参数.我试过没有任何结果:
mongoimport -u test-p test --authenticationDatabase test -h localhost:30158 --db test--collection users --type csv --file users.csv --upsert --upsertFields username --fields username.string\(\),password.string\(\),cname.string\(\),sname.string\(\),mail.string\(\),creation.date\(\),validation.auto\(\),clients.string\(\),customer.string\(\) --columnsHaveTypes
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Failed: type coercion failure in document #0 for column 'creation', could not parse token '2017-04-28T09:20:07.480Z' to type date
Run Code Online (Sandbox Code Playgroud)
我能做什么?
亲切的问候.
例如:2013-08-11T17:22:04.51+01:00
在此stackoverflow 答案中,涵盖了不带.51部分的ISODateTime 。
请帮助纠正这个正则表达式
^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z|[+-][01]\d:[0-5]\d)$
Run Code Online (Sandbox Code Playgroud)
处理我的格式。
我的 MongoDB 集合有一个 ISODate 字段,我想将结果格式化为 dd/mm/yyyy。
我的型号:
const Pedido = new Schema({
id: {
type: String,
required: true
},
cliente: {
type: Schema.Types.ObjectId,
ref: 'clientes',
required: true
},
date: {
type:Date
}
})
mongoose.model('pedidos',Pedido)
Run Code Online (Sandbox Code Playgroud)
这就是查询和渲染:
var query = await Pedido.find().populate('cliente').lean().exec()
res.render("admin/pedidos",{pedidos: query})
Run Code Online (Sandbox Code Playgroud)
我正在使用车把
{{#each pedidos}}
<h5 class="ordem1">Pedido #{{id}} <small>{{date}}</small></h5>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
它显示这样的结果:
2020 年 4 月 8 日星期三 21:00:00 GMT-0300 (GMT-03:00)
但我想展示:08/04/2020
有人可以帮我解决这个问题吗?谢谢你!!
为什么我要将其存储为ISODate而不是简单文本?
我需要以格式获取多个日期值的所有唯一日期DD.MM.
。在此示例数据中,12 月 24 日有两个值:
const data = [
{ date: ISODate("2019-12-24T03:24:00Z") },
{ date: ISODate("2019-12-24T04:56:00Z") },
{ date: ISODate("2019-12-25T02:34:00Z") },
{ date: ISODate("2019-12-26T01:23:00Z") }
]
Run Code Online (Sandbox Code Playgroud)
所以结果应该是
const result = [
'24.12.',
'25.12.',
'26.12.'
]
Run Code Online (Sandbox Code Playgroud)
因此,首先我将映射我的数据并仅拆分日期的值:
const dates = data.map(d => d.date.toString().split('T')[0])
Run Code Online (Sandbox Code Playgroud)
但是如何获取唯一值并更改输出格式?
更新
我想出了这个,但看起来很复杂......
data.map(d => {
const dateSplit = d.date.toString().split('T')[0].split('-')
return dateSplit[2] + '.' + dateSplit[1] + '.'
})
.filter((value, index, self) {
return self.indexOf(value) === index
})
Run Code Online (Sandbox Code Playgroud) 期望的行为
按对象的iso_string
属性对对象数组进行排序,降序.
实际行为
数组顺序不会更改.
我试过的
我必须在某个地方犯了一个简单的错误,因为多个帖子确认这是正确的sort()
语法.
iso_string
值生成new Date().toISOString()
;
var dates = [{
"formatted_date": "22/09/2018 @ 04:02pm",
"iso_string": "2018-09-22T06:02:22.485Z"
}, {
"formatted_date": "22/09/2018 @ 04:12pm",
"iso_string": "2018-09-22T06:12:04.471Z"
}, {
"formatted_date": "22/09/2018 @ 04:05pm",
"iso_string": "2018-09-22T06:05:45.818Z"
}, {
"formatted_date": "22/09/2018 @ 04:00pm",
"iso_string": "2018-09-22T06:00:46.954Z"
}, {
"formatted_date": "22/09/2018 @ 03:56pm",
"iso_string": "2018-09-22T05:56:13.968Z"
}];
var sorted_dates = dates.sort(function(a, b) {
return b.iso_string - a.iso_string;
});
console.log(sorted_dates);
Run Code Online (Sandbox Code Playgroud)
编辑: 我包装了值new Date()
并正确排序.
我正在为一些验证用户出生日期的遗留代码编写一些测试。我在课堂上遇到了以下方法。我怀疑try块中的if语句是否必要。根据我的理解,如果 parse 函数成功返回一个 LocalDate 对象,那么 date.toString() 应该总是等于输入的 dobstr,并且不需要做额外的检查。我错过了什么吗?我想不出任何我们需要额外检查的情况。请帮忙。谢谢!
private LocalDate format(String dobStr) throws Exception {
LocalDate date = null;
try {
date = LocalDate.parse(dobStr, DateTimeFormatter.ISO_DATE);
if (!dobStr.equals(date.toString())) {
throw new DateTimeParseException("some message");
}
}
catch (DateTimeParseException ex) {
throw ex;
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
这是我在 DateTimeFormatter.ISO_DATE 的源代码中找到的
public static final DateTimeFormatter ISO_DATE;
static {
ISO_DATE = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append(ISO_LOCAL_DATE)
.optionalStart()
.appendOffsetId()
.toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
Run Code Online (Sandbox Code Playgroud)