代码之家  ›  专栏  ›  技术社区  ›  amjad

为什么mongoTemplate返回的数字类型(int)列值是双精度的?

  •  0
  • amjad  · 技术社区  · 8 年前

    我试图从以下文档中获取uniq account_Number。

    {
        "_id" : ObjectId("5825e49785a4caf2bfa64a2f"),
        "profit" : "",
        "account_number" : 10,
        "m_number" : "",
        "registration_number" : "",
        "page_number" : "",
        "entry_date" : ISODate("2016-04-01T07:35:35Z"),
        "narration" : "By cash",
        "voucher_number" : "",
        "debit_credit" : 6150,
        "account_code" : 2102,
        "created_at" : ISODate("2016-04-01T07:35:35Z"),
        "updated_at" : ISODate("2016-04-01T07:35:35Z"),
        "employee_id" : 0,
        "balance" : 0,
        "credit" : 0,
        "debit" : 0,
        "particulars" : "",
        "since_last" : 0,
        "transaction_type" : 0,
        "voucher_path" : "",
        "branch" : "",
        "auto_voucher_number" : "",
        "check_book_series" : ""
    }
    

    account_number类型是number,我希望使用Spring Mongo模板将其获取为int。

     Query query = new Query();
        query.addCriteria(Criteria.where("account_code").is(accountCode).and("account_number").exists(true));
        return List accounts = mongoTemplate.getCollection("transaction").distinct("account_number", query.getQueryObject());
    

    上面的代码正在返回列表帐户。查看调试结果

     accounts = {ArrayList@6192}  size = 2815
     0 = {Double@6217} "1626.0"
     1 = {Double@6218} "1670.0"
     2 = {Double@6219} "2936.0"
     3 = {Double@6220} "2295.0"
     4 = {Double@6221} "1010.0"
     5 = {Double@6222} "1471.0"
     6 = {Double@6223} "3333.0"
     7 = {Double@6224} "1469.0"
     8 = {Double@6225} "3445.0"
     9 = {Double@6226} "3193.0"
     10 = {Double@6227} "219.0"
     11 = {Double@6228} "2509.0"
     12 = {Double@6229} "3750.0"
     13 = {Double@6230} "3425.0"
    

    简短的问题是-如何从文档中获取int类型列表,以及为什么返回双类型?

    这是文档的POJO,我是否需要在字段中定义一些内容?

    @Document(collection = "transaction")
    public class Transaction implements Serializable {
    
        private static final Long serialVersionUID = 1L;
    
        @Id
        //@GeneratedValue(strategy = GenerationType.IDENTITY)
        @Field(value = "id")
        private String id;
    
        @Field(value = "account_code")
        private Integer accountCode;
    
        @Field(value = "account_number")
        private Integer accountNumber;
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Ori Dar    8 年前

    默认情况下,MongoDB将数值保存为双精度:

    对于 db.coll.save({x: 1}) : x 将表示(并由Java驱动程序转换)为 1.0

    要插入32位整数,必须执行以下操作:

    db.coll.save({x: NumberInt(1)})

    对于64个整数,请执行以下操作:

    db.coll.save({x: NumberLong(1)})

    1 作为双倍(我认为)通过 DBObject Document .

    如果您仔细查看代码:

    mongoTemplate.getCollection("transaction") ...

    这是你的归宿 DBCollection 它返回 account_number 如上所述,其默认表示为双。 MongoTemplate 映射和转换在这里不相关:它们用于整个文档(例如 find 方法),这里不是这样。

    为了使用 int List 重视自己,或者改变 帐号 存储值 NumberInt .