标签: isodate

在聚合期间以几秒为单位获取MongoDB ISODate的unix时间戳

我正在寻找这个,但我找不到任何有用的解决我的情况.我想要的是在聚合期间以几秒为单位获取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

4
推荐指数
1
解决办法
8436
查看次数

mongodb查询中的日期/分钟

我将时间序列数据存储在mongodb数据库中,其中一个字段是ISODate对象.我正在尝试检索ISODate对象的分钟和秒值为零的所有项目.也就是说,所有在圆形小时都有时间戳的对象.

有没有办法做到这一点,或者我需要为每小时创建单独的领域,分,秒,直接为他们做的查询,如发现({"分":0,"第二":0})?

谢谢!

datetime time-series mongodb isodate

3
推荐指数
1
解决办法
2174
查看次数

joda时间ISO DateTime格式

我正在使用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)

这有什么不对?

datetime scala jodatime isodate

3
推荐指数
1
解决办法
8600
查看次数

MongoDB C ++,如何在插入时添加ISODate值

这是关于新的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 ++驱动程序应在文档中附带更多示例。

c++ mongodb isodate mongodb-query mongo-cxx-driver

3
推荐指数
1
解决办法
1154
查看次数

使用 Java 进行 MongoDB ISODate 字段搜索

我在使用 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)

并且查询不起作用。你能给我任何评论我的代码的哪一部分是错误的吗?

java mongodb isodate

3
推荐指数
1
解决办法
2万
查看次数

使用ISODate导入CSV文件MongoDB

当我从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)

我能做什么?

亲切的问候.

date mongodb isodate mongoimport

3
推荐指数
1
解决办法
3979
查看次数

用于验证正确的 ISO8601 日期字符串的正则表达式

例如: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)

处理我的格式。

java regex isodate

3
推荐指数
1
解决办法
8109
查看次数

在 find() mongoDB/mongoose 查询结果中格式化日期?

我的 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

有人可以帮我解决这个问题吗?谢谢你!!

format mongodb node.js handlebars.js isodate

3
推荐指数
1
解决办法
2583
查看次数

2
推荐指数
1
解决办法
785
查看次数

如何从对象数组中获取唯一的日期值

我需要以格式获取多个日期值的所有唯一日期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)

javascript arrays object isodate

2
推荐指数
1
解决办法
1592
查看次数

按iso字符串降序排序不起作用

期望的行为

按对象的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()并正确排序.

javascript isodate

0
推荐指数
2
解决办法
162
查看次数

是否需要额外检查将字符串解析为 LocalDate 对象?

我正在为一些验证用户出生日期的遗留代码编写一些测试。我在课堂上遇到了以下方法。我怀疑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)

java defensive-programming exception isodate localdate

0
推荐指数
1
解决办法
57
查看次数