我曾尝试使用一些示例,但我似乎无法弄清楚如何使用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)
现在,错误信息非常清楚,但究竟什么是适合我的解决方案?
我尝试了几种途径,这似乎最正确,但也行不通。
答案 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
您只想更新一个文档。因此,multi
为false
您需要使用以下代码更新代码:
WriteResult res = col.update(new BasicDBObject(),opt,true,false);