2016-11-17 243 views
0

我想从以下文档中获取uniq account_numbers。为什么mongoTemplate返回数字类型(int)的列值是双倍的?

{ 
    "_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类型是数字,我想要使用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 = {[email protected]} size = 2815 
0 = {[email protected]} "1626.0" 
1 = {[email protected]} "1670.0" 
2 = {[email protected]} "2936.0" 
3 = {[email protected]} "2295.0" 
4 = {[email protected]} "1010.0" 
5 = {[email protected]} "1471.0" 
6 = {[email protected]} "3333.0" 
7 = {[email protected]} "1469.0" 
8 = {[email protected]} "3445.0" 
9 = {[email protected]} "3193.0" 
10 = {[email protected]} "219.0" 
11 = {[email protected]} "2509.0" 
12 = {[email protected]} "3750.0" 
13 = {[email protected]} "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; 

回答

2

默认情况下,MongoDB中保存数值双打:

对于db.coll.save({x: 1})x将被表示(和你的Java驱动程序转换)为1.0双。

要插入一个32位整数,你必须做到:

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

和64个整数,这样做:

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

底层Java驱动程序也将1保存为双(我认为)通过DBObjectDocument

如果你在你的代码仔细看看:

mongoTemplate.getCollection("transaction") ...

这里你落回DBCollection它返回account_number这是一个原始名单,是说,表示为默认双。 MongoTemplate映射和转换在这里没有关系:它们用于整个文档(例如find方法),这里不是这种情况。

为了在这里使用int,你将不得不自己转换为List值,或改变account_number存储值NumberInt

+0

知道了!谢谢。 – amjad

+0

我无法控制集合以更改类型。我只是获取了值并提取了int值。再次感谢! – amjad

相关问题