MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Inserisci i dati nell'array nidificato in mongodb

Puoi aggiornare il documento "vendite" incorporato all'interno dell'array "act_mgr" con la seguente istruzione di aggiornamento:

> db.sales.update({"act_mgr.sales.last_interacted":"example@sqldat.com"}, {$push:{"act_mgr.$.sales.agent":"example@sqldat.com"}, $set:{"act_mgr.$.sales.last_interacted":"example@sqldat.com"}})
> db.sales.find().pretty()
{
    "_id" : ObjectId("4f855061dd53351011000b42"),
    "act_mgr" : [
        {
            "sales" : {
                "agent" : [
                    "example@sqldat.com",
                    "example@sqldat.com"
                ],
                "last_interacted" : "example@sqldat.com"
            }
        }
    ],
    "email" : "example@sqldat.com",
    "name" : "Aman",
    "sales" : [
        {
            "sno" : 1,
            "message" : "description",
            "status" : "open"
        },
        {
            "sno" : 12,
            "message" : "assad",
            "status" : "open"
        }
    ]
}
> 

Puoi aggiungere il documento incorporato contenente le informazioni sullo "sviluppatore" all'array in questo modo:

> db.sales.update({"_id" : ObjectId("4f855061dd53351011000b42")}, {$push:{"act_mgr":{ "developer" : {"agent" : ["example@sqldat.com" ],  "last_interacted" : "example@sqldat.com" } }}})
> db.sales.find().pretty()
{
    "_id" : ObjectId("4f855061dd53351011000b42"),
    "act_mgr" : [
        {
            "sales" : {
                "agent" : [
                    "example@sqldat.com",
                    "example@sqldat.com"
                ],
                "last_interacted" : "example@sqldat.com"
            }
        },
        {
            "developer" : {
                "agent" : [
                    "example@sqldat.com"
                ],
                "last_interacted" : "example@sqldat.com"
            }
        }
    ],
    "email" : "example@sqldat.com",
    "name" : "Aman",
    "sales" : [
        {
            "sno" : 1,
            "message" : "description",
            "status" : "open"
        },
        {
            "sno" : 12,
            "message" : "assad",
            "status" : "open"
        }
    ]
}
> 

La documentazione sui modificatori $push e $set può essere trovata nella documentazione "Aggiornamento":http ://www.mongodb.org/display/DOCS/Aggiornamento

Ulteriori informazioni sulla creazione e l'aggiornamento di documenti incorporati con Mongo db sono disponibili nella documentazione intitolata "Dot Notation (Reaching into Objects)"https://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Le informazioni sull'aggiornamento dei documenti incorporati utilizzando l'operatore posizionale "$" sono disponibili nella sezione "L'operatore posizionale $" della documentazione "Aggiornamento".
https://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Un avvertimento:generalmente è più comune che i documenti incorporati corrispondano tutti alla stessa struttura, in modo che i singoli documenti incorporati possano essere referenziati più facilmente. Il tuo array "vendite" ne è un buon esempio; ogni documento incorporato contiene le stesse chiavi, "sno", "messaggio" e "stato"

Tuttavia, i documenti incorporati all'interno dell'array "act_mgr" contengono chiavi diverse; il primo contiene "vendite" e il secondo contiene "sviluppatore". Invece, forse considera la seguente struttura:

"act_mgr" : [
    {
        "title" : "sales",
        "agent" : [
            "example@sqldat.com",
            "example@sqldat.com"
        ],
        "last_interacted" : "example@sqldat.com"
    },
    {
        "title": "developer",
        "agent" : [
            "example@sqldat.com"
        ],
        "last_interacted" : "example@sqldat.com"
    }
]

Ora, ogni documento incorporato contiene le stesse chiavi, "titolo", "agente" e "last_interacted".

È possibile aggiornare i documenti secondari con il comando seguente.

> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"example@sqldat.com"}, $set:{"act_mgr.$.last_interacted":"example@sqldat.com"}})

Si spera che questo ti consentirà di apportare gli aggiornamenti di cui hai bisogno e forse di darti qualche spunto di riflessione sulla progettazione dello schema. Buona fortuna!