2015-04-19 6 views
0

J'ai une structure de document MongoDB comme celui-ciMongoDB Java imbriqué mise à jour

{ 
    "_id": "002", 
    "list": [ 
    { 
     "year": "2015", 
     "entries": [{...}, {...}] 
    }, 
    { 
     "year": "2014", 
     "entries": [{...}, {...}] 
    } 
    ] 
} 

Je veux pousser un nouvel élément dans « entrées ». Je sais que c'est possible en utilisant

collection.updateOne(
    Filters.eq("_id", "002"), 
    new Document("$push", new Document("list.0.entries", "{...}") 
); 

Mais cela ajoute aux "entrées" du 1er élément de "liste". Je veux ajouter à "entrées" pour le "année" 2015. Comment puis-je faire cela avec MongoDB Java driver API (3.0)?

+0

alors quel est le problème? 2015 est le 1er élément. –

Répondre

0

Je pense que vous devriez utiliser quelque chose comme

Filters.and(Filters.eq("_id", "002"), Filters.eq("list.year", "2015")) 

PS Comme les filtres javadoc l'indique, il est pratique d'utiliser l'importation statique pour elle (pour le rendre moins bavard en sautant les « filtres ». Partie)

+0

Toujours avoir du mal à pousser l'entrée. collection.updateOne (et (eq ("_ id", "002"), eq ("list.year", "2015")), nouveau Document ("$ push", nouveau document ("entries", " {...} ") Ceci insère une nouvelle clé" entrées "avec une valeur donnée à côté de" liste ", pas dans" liste "avec" année "comme 2015 – FrankS

+0

Je pense (pas le temps d'essayer ceci atm , désolé), vous devez utiliser 'list. $. entries' au lieu de" entrées ".Voir http://docs.mongodb.org/manual/reference/operator/update/positional/ J'espère que cela aidera . – vambo

0

vous pouvez utiliser

Bson filter = Filters.and(Filters.eq("_id", "002"), Filters.eq("list", Filters.eq($elemMatch, Filters.eq("year", "2015")) Document list = collection.find().filter(filter)

Ensuite, vous pouvez parcourir la liste pour trouver l'année 2015 et obtenir les entrées pour cette un et insérez le nouvel élément via le code java. Conservez la liste mise à jour dans une variable locale et écrivez celle-ci via une commande de mise à jour dans votre mongoDB.