使用mongodb的java api进行升级

时间:2015-06-02 01:44:58

标签: java mongodb

我曾尝试使用一些示例,但我似乎无法弄清楚如何使用Java在mongodb中进行upsert,而在其他语言(即python)中使用它很容易。

我有以下代码(注意createDBObject只是将一堆字段放入字典中,请参阅下面的print):

    public static void mongo_test(HashMap<String,String> arg){
        DBObject opt = createDBObject(arg);

        try{
            if(Double.valueOf(arg.get("Bid"))>0.0){


                //should be upsert
                WriteResult res = col.update(opt,null,true,false);
            }
        }catch(Exception e){
            e.printStackTrace();
        }



    }

System.out.println(opt)给我的地方:

{ "date" : 20150601 , "ticker" : "SPY" , "callPut" : "C" , "Last" : 18.95 , "Vol" : 6.0 , "Chg" : 0.0 , "maturity" : 20150605 , "Symbol" : "SVXY150605C00070000" , "Open Int" : 6.0 , "Strike" : 70.0 , "Ask" : 20.6 , "Bid" : 17.9}

我收到以下错误:

java.lang.IllegalArgumentException: update can not be null
    at com.mongodb.DBCollectionImpl.update(DBCollectionImpl.java:244)
    at com.mongodb.DBCollection.update(DBCollection.java:214)
    at com.mongodb.DBCollection.update(DBCollection.java:247)
    at yahooscrape.yahooScrape.mongo_test(yahooScrape.java:283)
    at yahooscrape.yahooScrape.main(yahooScrape.java:216)

现在,错误信息非常清楚,但究竟什么是适合我的解决方案?

我尝试了几种途径,这似乎最正确,但也行不通。

2 个答案:

答案 0 :(得分:0)

MongodB java更新如下

 collection.update(DBObject q, DBObject o, boolean upsert, boolean multi).

您提供 arg 作为查询未更新,因此这可能是正确的

col.update(createDBObject(new HashMap<String,String>()),opt,true,false);

答案 1 :(得分:0)

看一下方法:

collection.update(DBObject q, DBObject o, boolean upsert, boolean multi)

适用于mongoDB Java API:

  

参数:

     
      
  • q - 更新的选择标准
  •   
  • o - 要应用的修改
  •   
  • upsert - 如果为true,则在没有文档与更新查询条件匹配时插入文档
  •   
  • multi - 如果为true,则更新集合中与更新查询条件匹配的所有文档,否则仅更新一个
  •   
  • 您没有任何具体的选择标准。因此,您可以添加空new BasicDBObject()作为选择所有内容的选择条件。

  • opt是修改后的对象

  • 需要设置upsert true

  • 您只想更新一个文档。因此,multifalse

您需要使用以下代码更新代码:

WriteResult res = col.update(new BasicDBObject(),opt,true,false);