2014-04-19 23 views
2

,我要的是如下

db.idx.update({"keyword":"Some dynamic keyword"}, 
       {$addToSet:{url: "Some dynamic url"}}, 
       {upsert: True}) 

我需要在Java中的等價的MongoDB查詢的MongoDB中要執行的查詢嵌入文檔,我曾嘗試很多,但我一直在得到錯誤。我對Java和MongoDB都很陌生,但我很想學習,所以請幫助我!而且,如果你可以向我解釋這個查詢的JSON和它的結構。萬分感謝提前:d(Y)

編輯: -

我曾嘗試: -

client = new MongoClient("localhost"); 
    db = client.getDB("idx"); 
    BasicDBObject lurl = new BasicDBObject(); 
    BasicDBObject lurl2 = new BasicDBObject(); 
    BasicDBObject lkey = new BasicDBObject(); 
    for(Element e : links){ 
     DBCollection colls = db.getCollection(e.text()); 
     lurl.put("$addToSet", e.attr("href")); 
     lurl2.put("url", new BasicDBObject(lurl)); 
     lkey.put("keyword", e.text()); 
     colls.update(lkey, lurl2, true, false); 
    } 

,我收到的錯誤是: -

Exception in thread "main" java.lang.IllegalArgumentException: Document field names can't start with '$' (Bad Key: '$addToSet') 
at com.mongodb.DBCollection.validateKey(DBCollection.java:1829) 
at com.mongodb.DBCollection._checkKeys(DBCollection.java:1787) 
at com.mongodb.DBCollection._checkValue(DBCollection.java:1810) 
at com.mongodb.DBCollection._checkKeys(DBCollection.java:1788) 
at com.mongodb.DBCollection._checkObject(DBCollection.java:1774) 
at com.mongodb.DBCollectionImpl.update(DBCollectionImpl.java:250) 
at com.mongodb.DBCollection.update(DBCollection.java:191) 
at com.mongodb.DBCollection.update(DBCollection.java:224) 
at myse.MySE.extractLinkData(MySE.java:55) 
at myse.MySE.crawl(MySE.java:61) 
at myse.MySE.main(MySE.java:69) 

的Java結果:1 BUILD SUCCESSFUL(總共13秒)

+0

您應該提供一個代碼示例和您收到的錯誤以顯示您迄今的工作量。 –

+0

@ChristianP我添加了我的代碼以及運行該程序時得到的異常。請看看它(Y) –

+0

我認爲你構建錯誤的查詢。在lurl2中放置'「$ addToSet」',在'lurl'中放入''url「。 –

回答

1

我認爲你的更新參數是錯誤的(lurl2):

lurl.put("url", e.attr("href")); 
    lurl2.put("$addToSet", new BasicDBObject(lurl)); 
+0

異常消失了,但我沒有看到我的數據庫中有任何更新,爲什麼? –

+0

可能有多種原因。您應該先調試代碼並檢查發送給更新查詢的參數。 –

+0

我的錯誤在於我!我給了錯誤的集合名稱。我收藏的名稱是「idx」,我將其指定爲e.text() –

相關問題