MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Insérer des données dans un tableau imbriqué dans mongodb

Vous pouvez mettre à jour le document "ventes" intégré dans le tableau "act_mgr" avec l'instruction de mise à jour suivante :

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

Vous pouvez ajouter le document intégré contenant les informations "développeur" au tableau comme suit :

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

La documentation sur les modificateurs $push et $set se trouve dans la documentation "Updating" :http ://www.mongodb.org/display/DOCS/Updating

Plus d'informations sur la création et la mise à jour de documents intégrés avec Mongo db peuvent être trouvées dans la documentation intitulée "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Des informations sur la mise à jour des documents intégrés à l'aide de l'opérateur de position "$" se trouvent dans la section "L'opérateur de position $" de la documentation "Mise à jour".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Un mot d'avertissement :il est généralement plus courant que les documents intégrés correspondent tous à la même structure, de sorte que les documents intégrés individuels peuvent être référencés plus facilement. Votre tableau "ventes" en est un bon exemple ; chaque document intégré contient les mêmes clés, "sno", "message" et "status"

Cependant, les documents intégrés à l'intérieur de votre tableau "act_mgr" contiennent des clés différentes ; le premier contient "ventes" et le second contient "développeur". Au lieu de cela, envisagez peut-être la structure suivante :

"act_mgr" : [
    {
        "title" : "sales",
        "agent" : [
            "rohan@walkover.in",
            "abc@walkover.in"
        ],
        "last_interacted" : "abc@walkover.in"
    },
    {
        "title": "developer",
        "agent" : [
            "newdeveloper@walkover.in"
        ],
        "last_interacted" : "newdeveloper@walkover.in"
    }
]

Désormais, chaque document intégré contient les mêmes clés, "title", "agent" et "last_interacted".

Vous pouvez mettre à jour les sous-documents avec la commande suivante.

> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"abc@walkover.in"}, $set:{"act_mgr.$.last_interacted":"abc@walkover.in"}})

J'espère que cela vous permettra de faire les mises à jour dont vous avez besoin, et peut-être vous donnera matière à réflexion concernant la conception du schéma. Bonne chance !