2015-08-12 12 views
5

Ho una collezione mongo come:come aggiungere array esistente nella collezione esistente in MongoDB usando Java con nuovi valori

{ 
    "_id": ObjectId("55cad746aed75601b4822cc9"), 
    "entityId": "12", 
    "entityType": "a", 
    "nameIdentity": [{ 
     "fName": "abc", 
     "lName": "def", 
     "dob": "00", 
     "address": "xyz" 
    }, 

    ] 
} 

Sto usando mongodb java 3.0 conducente e cercando di abbinare e aggiornamento. Ad esempio: sto cercando di abbinare su entityId se trovato poi aggiungere il nuovo nameIdentity.

La seconda volta quando passo

{ 
    "fName": "123", 
    "lName": "456", 
    "dob": "00", 
    "address": "789" 
} 

Per il mio entityId: 12 se corrisponde poi la mia nuova collezione dovrebbe in questo modo:

{ 
    "_id": ObjectId("55cad746aed75601b4822cc9"), 
    "entityId": "12", 
    "entityType": "a", 
    "nameIdentity": [{ 
    "fName": "abc", 
    "lName": "def", 
    "dob": "00", 
    "address": "xyz" 
    }, { 
    "fName": "123", 
    "lName": "456", 
    "dob": "00", 
    "address": "789" 
    }] 
} 

voglio aggiungere che nello stesso oggetto o la raccolta abbinato. Ma la sua sostituzione della matrice precedente e l'aggiunta di nuovo in questo modo:

{ 
    "_id": ObjectId("55cad746aed75601b4822cc9"), 
    "entityId": "12", 
    "entityType": "a", 
    "nameIdentity": [ 

    { 
     "fName": "123", 
     "lName": "456", 
     "dob": "00", 
     "address": "789" 
    } 
    ] 
} 

Quando l'ID entità è abbinato Voglio tutto da aggiungere non aggiornato. Il codice che ho provato è:

mongoDatabase.getCollection("entity").findOneAndUpdate(
    updateDocument, new Document("$set",entityDocument)); 

ho provato con $push e $set. Sta creando una nuova matrice nameIdentity. Ma voglio aggiungere nello stesso array nameIdentity corrispondente. Qualche suggerimento dove sto andando male?

risposta

4

Si dovrebbe usare $push come segue:

db.collection.update({ 
    "entityId": "12" 
}, { 
    $push: { 
    "nameIdentity": { 
     "fName": "123", 
     "lName": "456", 
     "dob": "00", 
     "address": "789" 
    } 
    } 
}) 

sua interrogazione equivalente utilizzando il driver mongo Java è qualcosa di simile (testato):

db.getCollection("entity").updateOne(new Document("entityId", "12"), 
new Document("$push", new Document("nameIdentity", new Document("fName", "123").append("lName", "456") 
    .append("dob", "00").append("address", "789")))); 

Se si desidera aggiornare molti documenti quindi utilizzare updateMany anziché updateOne passando i parametri richiesti.

+0

Se sto passando più array per esempio nome {}, indirizzo {}, {} qualificazione, c'è un modo di scelta rapida per aggiornare o devo aggiungere tutti coloro manualmente query di aggiornamento? –

+0

@ShaikMujahidAli Cosa intendi? vuoi spingere più oggetti in 'nameIdentity' con' entityId: 12'? in caso affermativo, crea una lista di tali valori e passa a '$ push'. – Vishwas

+0

dopo aver identificato l'id di entità 12, ho bisogno di controllare fName, lName, indirizzo, dob esiste se non fa altro aggiungere come sopra. per favore, puoi aiutarla adesso? –

1

Fondamentalmente si vuole $push e aggiungere alla voce di matrice indicata qui. Ma per .findOneAndUpdate() devi anche impostare il tipo ReturnDocument per ricevere il risultato.

Altrimenti viene restituito il documento "originale", così come lo è per tutti i driver.

Document entityDocument = new Document(); 
    entityDocument.append("fname","123"); 
    entityDocument.append("lname","456"); 
    entityDocument.append("dob","00"); 
    entityDocument.append("address","789") 

    Document doc = mongoDatabase.getCollection("entity").findOneAndUpdate(
      new Document("entityId", 12), 
      new Document("$push", new Document("nameIdentity", entityDocument)), 
      new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER) 
    ); 

    System.out.println(doc.toJson()); 
+0

Se sto passando più array per es. nome {}, indirizzo {}, qualifica {}, c'è un modo di aggiornamento rapido o devo aggiungere tutti quelli manualmente nella query di aggiornamento? –

+0

@ShaikMujahidAli Beh, in realtà ti ho mostrato la sintassi "corretta" qui e hai scelto di non accettare. Se hai nuove domande, posta ulteriori domande. –

Problemi correlati