Mongodb 如何将时间戳转换为年月日日期

 更新时间:2022年10月17日 14:35:51   作者:lMasterSparkl  
这篇文章主要介绍了Mongodb 如何将时间戳转换为年月日日期,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mongodb将时间戳转换为年月日日期

使用dateToString 方法进行转换 并且通过format指定转换日期格式

        Integer userId=aaa;
        GroupOperation groupOperation = Aggregation.group("day").sum("money").as("todayIncome").count().as("todayPayCount");
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("userId").is(userId)),
                project("userId","money").andExpression("{$dateToString: {date: { $add: {'$createTime', [0]} }, format: '%Y%m%d'}}", new Date(28800000)).as("day"),
                groupOperation,
                sort(Sort.Direction.ASC, "_id")
        );

注意:

1.必须使用 $dateToString: {date: { $add: 通过求和进行date数据转换 如果去掉后面的会报解析错误

org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 16006 (Location16006): 'can't convert from BSON type long to Date' on server localhost:50000. The full response is {"ok": 0.0, "errmsg": "can't convert from BSON type long to Date", "code": 16006, "codeName": "Location16006"}; nested exception is com.mongodb.MongoCommandException: Command failed with error 16006 (Location16006): 'can't convert from BSON type long to Date' on server localhost:50000. The full response is {"ok": 0.0, "errmsg": "can't convert from BSON type long to Date", "code": 16006, "codeName": "Location16006"}

2.必须增加 new Date(28800000) 的时间 原因是增加了8个时区的偏移量

MongoDB中的日期查询的坑

在熟悉monggoDB的时候遇到了时间查询的问题代码如下:

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
 
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
 
/**
 * mongo 数据库直连测试
 * @author fuhao
 *
 */
public class MongDBTest {
	public static void main(String[] args) throws Exception {
		List<ServerAddress> list = new ArrayList<ServerAddress>();
//		连接数据库   ip 端口
		list.add(new ServerAddress("10.39.XXX.XXX", 27010));
		MongoClient mongoClient = new MongoClient(list);
		//数据库名称
	    DB psdoc = mongoClient.getDB("qa_db_center");
	    //表明
	    DBCollection collection=psdoc.getCollection("base_user_info");
	    
	    BasicDBObject queryObject = null; 
	    
	    // 时间查询    数据库看到的时间不是真实时间  加8小时后才是正确的时间
	    DBObject dbObject = new BasicDBObject();
	    String startDate = "2018-03-29 15:59:06";
	    String endDate = "2018-03-29 16:30:46";
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    dbObject.put("$gte", sdf.parse(startDate));
	    dbObject.put("$lte",  sdf.parse(endDate));
	    queryObject = new BasicDBObject();
	    queryObject.put("create_time",dbObject);
	    DBCursor find = collection.find(queryObject);
	     
	    while (find.hasNext()) {
	    	 DBObject next = find.next();
	    	 Object real_name = next.get("real_name");
	    	 Object mobile = next.get("mobile");
	    	 Object create_time = next.get("create_time"); 
	    	 String str = sdf.format(create_time);
	    	 System.out.println(real_name +"====="+mobile +"====="+str);
		}
	     System.out.println("结束");
	    
	}
}

请求页面 默认页 https://blog.csdn.net/qq_27292113/article/details/91876121 【标题】:MongoDB中的日期查询的坑_天马行空-的博客-CSDN博客_mongodb query 日期 【内容】:

在熟悉monggoDB的时候遇到了时间查询的问题代码如下:

上面的代码中查询时间 按mysql 的流程应该查询到 2018-03-29 15:59:06 到2018-03-29 16:30:46 这个区间的数据,但是mongoDB不同,因为mongo中的date类型以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时)时间。而系统时间使用的是GMT+0800时间,两者正好相差8个小时。也就是用java 代码插入的时间类型的值都会被减8小时。这个坑挺大的不注意很容易出事。

展示一下对比数据便于理解:

上面的圈是查询的条件对应数据库中的数据是2018-03-29T08:30:36.310Z 如下图,但是在java中你写2018-03-29 08:30:36这个时间肯定查不到数据

对比得出数据库中看到的时间和实际时间差8小时,但是查询出来的结果时间还是会被转换回来(不以时间为条件查询的话基本没什么问题)。

记录一下mongoDB中查询区间时间的执行语句:

db.getCollection('base_user_info').find({"create_time":{"$gte":ISODate("2018-03-29 07:59:06"),"$lte":ISODate("2018-03-29 08:30:46")}});

base_user_info :表名  create_time:字段名

比较符号对应列表

  • $gt -------- greater than  >
  • $gte --------- gt equal  >=
  • $lt -------- less than  <
  • $lte --------- lt equal  <=
  • $ne ----------- not equal  !=
  • $eq  --------  equal  =

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MongoDB连接数据库并创建数据等使用方法

    MongoDB连接数据库并创建数据等使用方法

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。接下来通过本文给大家介绍MongoDB连接数据库并创建数据等使用方法,感兴趣的朋友一起看看吧
    2021-11-11
  • Mac下安装配置mongodb并创建用户的方法

    Mac下安装配置mongodb并创建用户的方法

    最近在在学习nodejs,相比mysql,mongodb与nodejs搭配更合适,存储数据格式也比较接近JS对象。下面这篇文章主要给大家介绍了关于在Mac下安装配置mongodb并创建用户的相关资料,需要的朋友可以参考下
    2018-05-05
  • MongoDB中实现多表联查的实例教程

    MongoDB中实现多表联查的实例教程

    数据库应用在我们的生活中是很常见的,在编辑一些应用以及软件的时候都需要用到数据库来存储数据,下面这篇文章主要给大家介绍了关于MongoDB中实现多表联查的相关资料,需要的朋友可以参考下
    2022-07-07
  • Mongodb 3.2.9开启用户权限认证问题的步骤详解

    Mongodb 3.2.9开启用户权限认证问题的步骤详解

    这篇文章主要给大家介绍了关于Mongodb 3.2.9开启用户权限认证问题的详细步骤,通过开启权限认证,会对大家的Mongodb更加保护的安全些,文中将步骤介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • MongoDB日志切割的三种方式总结

    MongoDB日志切割的三种方式总结

    mongo默认是没有进行日志分割的,所有的日志持续写到一个文件中,缺点是很明显的,日志文件会越来越大,下面这篇文章主要给大家介绍了关于MongoDB日志切割的三种方式,需要的朋友可以参考下
    2021-09-09
  • MongoDB中aggregate()方法实例详解

    MongoDB中aggregate()方法实例详解

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,下面这篇文章主要给大家介绍了关于MongoDB中aggregate()方法的相关资料,需要的朋友可以参考下
    2023-01-01
  • mongodb的安装使用和pymongo基本使用教程

    mongodb的安装使用和pymongo基本使用教程

    这篇文章主要介绍了mongodb的安装使用和pymongo基本使用教程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-07-07
  • mongodb+php实现简单的增删改查

    mongodb+php实现简单的增删改查

    这篇文章主要介绍了mongodb+php实现简单的增删改查的相关资料,需要的朋友可以参考下
    2016-07-07
  • mongoDB 实现主从读写分离实现的实例代码

    mongoDB 实现主从读写分离实现的实例代码

    这篇文章主要介绍了 mongoDB 实现主从读写分离实现的实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • PHP库 查询Mongodb中的文档ID的方法

    PHP库 查询Mongodb中的文档ID的方法

    这篇文章主要介绍了PHP库 查询Mongodb中的文档ID的方法的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论