使用mongo java驱动程序操作数组

使用mongo java驱动程序操作数组,java,arrays,mongodb,Java,Arrays,Mongodb,我使用的是mongo-java-driver-2.11.2。我被数组操作卡住了。我成功地创建了一个数组,但在尝试向数组中插入一个元素时,出现了一个异常,即坏键:“$PUSH”。这是我的密码: DBCursor cursor = iiCollection.find(new BasicDBObject(TOKEN, token.getToken())); if(cursor.hasNext()){ DBObject o = cursor.next(); int freq = (I

我使用的是
mongo-java-driver-2.11.2
。我被数组操作卡住了。我成功地创建了一个数组,但在尝试向数组中插入一个元素时,出现了一个异常,即
坏键:“$PUSH”
。这是我的密码:

DBCursor cursor = iiCollection.find(new BasicDBObject(TOKEN, token.getToken()));
if(cursor.hasNext()){
    DBObject o = cursor.next();
    int freq   = (Integer) o.get(FREQ);
    iiCollection.update(o, new BasicDBObject(FREQ, freq + 1)
                    .append("$push", new BasicDBObject(DOCS, docId)));
}
else{
    iiCollection.insert(new BasicDBObject(TOKEN, token.getToken())
                    .append(FREQ, 1)
                    .append(DOCS, new String[]{docId}));
}

“else”分支正常,但第一个分支不起作用,请帮助我解决问题。

以下代码应该可以解决此问题:

iiCollection.update(o, new BasicDBObject("$set",new BasicDBObject("freq", freq+1)).append("$push", new BasicDBObject("docs", 1)));
这样做的原因是,当您执行如下代码时

new BasicDBObject("freq", freq+1).append("$push", new BasicDBObject("docs", 1))
它转换为

{ "freq" : 3 , "$push" : { "docs" : 1}}
这是不正确的