Mongodb分组数据类型更改

时间:2012-08-10 21:50:30

标签: mongodb mongodb-java

在使用mongodb +他们的java驱动程序时,我遇到了一个奇怪的事情。 当我进行分组查询时,密钥的数据类型从int更改为double。

(即我正在对'小时'的键进行分组,它在所有对象中存储为int,但是在我得到的结果中键变为double类型。)

这不是一个大问题......但奇怪的是,它会随意改变键值对的数据类型。有没有人有这个出现?这是正常行为吗?

谢谢,

P.S。执行常规.find()查询会返回正确的数据类型,fyi。

编辑: 一些示例代码:

import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.QueryOperators;

public class MongoTestQueries {

private static final String TESTDBNAME = "badgerbadgerbadger";
private static final String TESTCOLNAME = "mushroom";
private static final Long TESTMAX = 50L;

private static final String KEY1 = "a";
private static final String KEY2 = "snake";
private static final String KEY3 = "plane";

/**
 * This starts running it.
 * 
 * @param args
 *            the arguments.
 */
public static void main(final String[] args) {
//You'll need to write your own code here for connecting to db as you see fit.
    MongoConnection mc = new MongoConnection("someserver.com", TESTDBNAME);
    mc.setCurCol(TESTCOLNAME);
    mc.getCurCol().drop();
    mc.setCurCol(TESTCOLNAME);


    DBCollection col = mc.getCurCol();

    populateCollection(col);
    System.out.println(col.count() + " inserted into db.");

    regGroupSearch(col);

}

private static void populateCollection(DBCollection col) {
    for (Long l = 0L; l < TESTMAX; l++) {
        col.insert(new BasicDBObject(KEY1, new Integer(l.intValue())).append(KEY2,
                Math.random()).append(KEY3, (TESTMAX - l) + "a string"));
    }
}

private static void regGroupSearch(final DBCollection col) {
    System.out.println("Group Search:");
    DBObject key = new BasicDBObject(KEY1, true).append(KEY3, true);
    DBObject cond = new BasicDBObject().append(KEY1, new BasicDBObject(QueryOperators.GT, 4.0));
    DBObject initial = new BasicDBObject("count", 0).append("sum", 0);
    String reduce = "function(obj,prev){prev.sum+=obj." + KEY2 + ",prev.count+=1}";
    String finalize = "function(obj){obj.ave = obj.sum/obj.count}";
    DBObject groupResult = col.group(key, cond, initial, reduce, finalize);
    printDBObject(groupResult);
    System.out.println("Done.");
}

private static void printDBObject(final DBObject toPrint) {
    for (String k : toPrint.keySet()) {
        System.out.println(k + ": " + toPrint.get(k));
    }
}

}

0 个答案:

没有答案