2014-04-19 3 views
2

La requête que je veux être exécuté dans MongoDB est comme suit

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

J'ai besoin l'équivalent Java de cette requête MongoDB, j'ai essayé beaucoup, mais je continue à obtenir des erreurs. Je suis nouveau à la fois Java et MongoDB mais j'ai hâte d'apprendre, alors s'il vous plaît aidez-moi! Et aussi si vous pouvez m'expliquer le JSON pour cette requête et sa structure. Merci un million à l'avance: D (Y)

EDIT: -

Ce que j'ai essayé: -

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); 
    } 

Les erreurs que je reçois sont les suivantes: -

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 Résultat: 1 BUILD SUCCESSFUL (temps total: 13 secondes)

+0

Vous devez fournir un exemple de code et les erreurs que vous recevez pour montrer votre effort jusqu'à présent. –

+0

@ChristianP J'ai ajouté mon code et les exceptions que je reçois quand j'exécute le programme. S'il vous plaît jeter un oeil dans le (Y) –

+0

Je pense que vous construisez la mauvaise requête. Mettez '" $ addToSet "' dans lurl2 et '" url "' dans 'lurl'. –

Répondre

1

Je pense que votre le paramètre de mise à jour est incorrect (lurl2):

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

Les exceptions ont disparu mais je ne vois aucune mise à jour dans ma base de données, pourquoi? –

+0

Il pourrait y avoir un certain nombre de raisons. Vous devez commencer par déboguer votre code et vérifier les paramètres que vous envoyez à votre requête de mise à jour. –

+0

L'erreur était de ma part! J'ai donné le mauvais nom de collection. Le nom de ma collection est "idx" et je l'ai spécifié comme e.text() –

Questions connexes