spring mongdb 查询问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
anthoy
V2EX    Java

spring mongdb 查询问题

  •  
  •   anthoy May 19, 2021 2181 views
    This topic created in 1806 days ago, the information mentioned may be changed or developed.

    我在使用 spring-data-mongodb 在 spring boot 中处理数据库

    数据库内容如下:

    { "_id" : "b8261207-3f95-40ca-bd05-e06ad451dff8", "updateDate" : ISODate("2021-05-18T09:17:28.409Z"), "isDelete" : false, "name" : "test", "receivedDate" : ISODate("2021-05-15T09:38:52Z"), "deviceId" : "55118b35-43d3-4700-b8be-41daefb7f502", "createDate" : ISODate("2021-05-18T09:17:28.409Z") } { "_id" : "b8261207-3f95-40ca-bd05-e06ad451dff8", "updateDate" : ISODate("2021-05-18T09:17:28.409Z"), "isDelete" : false, "test" : "test", "createDate" : ISODate("2021-05-18T09:17:28.409Z") } 

    然后我写的 repository 查询代码如下:

     public List<HashMap> findAll() { return mongoTemplate.findAll(HashMap.class, Constant.collectionName); } 

    我有两个问题想问下:

    • 因为数据库储存的 json 格式和内容是不固定的,所以我没有使用 entity 来处理实体类,而是使用 HashMap<String, Object>来处理的,目前在查询的时候使用 HashMap 进行查询结果储存

    对于这个方案,大家有不同的建议嘛?使用 HashMap 有个问题是转不了 HashMap<String, Object>,这个转换只能遍历转换?

    我也尝试使用 DBObject 替代 HashMap 进行使用,这两个那个比较好呢?或者有没有其他的方案

    • 第二个问题是无论我使用到的是 HashMap 或者 DBObject,查询出来的结果都是下面的
    [ { "updateDate": 1621329448409, "isDelete": false, "name": "test", "_id": "b8261207-3f95-40ca-bd05-e06ad451dff8", "receivedDate": 1621071532000, "deviceId": "55118b35-43d3-4700-b8be-41daefb7f502", "createDate": 1621329448409 } ] 

    这个时间在 mongodb 中是 ISODate,但是查询出来由于没有使用具体的类型导致了没有自动转换格式,我希望查询出来的格式是"yyyy-MM-dd HH:mm:ss"的

    这个可以有什么办法自动实现嘛?使用遍历手动转感觉不太友好

    • 资料

    Storing a JSON schema in mongodb with spring

    如何在 Spring Data MongoDB 中保存和查询动态字段

    8 replies    2021-05-21 11:00:48 +08:00
    chendy
        1
    chendy  
       May 19, 2021
    既然选择了哈希迈普
    就自己慢慢转吧
    tubimasky
        2
    tubimasky  
       May 19, 2021
    fastjson
    JSON.parse(JSON.toJSONStringWithDateFormat(o, "yyyy-MM-dd HH:mm:ss"))
    itechify
        3
    itechify  
    PRO
       May 19, 2021 via Android
    为什么不是固定的格式呢?存数据不是先编写实体先吗?
    用 JsonObect 来搞?
    clf
        4
    clf  
       May 20, 2021
    一般都是先建实体的。要灵活也是继承于某个抽象类,并实现指定的转换方法。
    anthoy
        5
    anthoy  
    OP
       May 21, 2021
    @oneisall8955 @lychs1998 因为数据结构变化很大,没有办法用一个实体处理,实体的参数一直在变,建实体的话要建太多了
    clf
        6
    clf  
       May 21, 2021
    @anthoy 无论变化多么大,只要它需要用于业务数据,理论上就应该拆分成一个个实体类。如果说真的存在参数名灵活,那么是不是缺少了一个参数名的配置表 /字段?
    anthoy
        7
    anthoy  
    OP
       May 21, 2021
    @lychs1998 是有一个配置表,我也认可理论上是要弄成实体类的,但实际上使用时确实不能这样子,数据变动太多,而且考虑以后的数据未知,创建实体类给之后的使用导致需要一次次的重新创建,感觉很不友好,目前我是用 DBObject 处理,感觉配置表读取需要的数据
    clf
        8
    clf  
       May 21, 2021
    @anthoy 所以我之前提到过继承于某个抽象类,后续灵活的数据也要按照一定的约定,在这个基础上做更多的拓展。“数据未知”证明了你们在设计业务数据结构的阶段就存在问题了。
    About     Help     Advertise     Blog     API     FAQ     Solana     3424 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 10:57 PVG 18:57 LAX 03:57 JFK 06:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86