sql >> Base de Datos >  >> NoSQL >> MongoDB

Insertar datos en una matriz anidada en mongodb

Puede actualizar el documento de "ventas" incrustado dentro de la matriz "act_mgr" con la siguiente declaración de actualización:

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

Puede agregar el documento incrustado que contiene la información del "desarrollador" a la matriz de la siguiente manera:

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

La documentación sobre los modificadores $push y $set se puede encontrar en la documentación de "Actualización":http ://www.mongodb.org/display/DOCS/Actualización

Puede encontrar más información sobre la creación y actualización de documentos incrustados con Mongo db en la documentación titulada "Notación de puntos (alcanzar objetos)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Puede encontrar información sobre la actualización de documentos incrustados mediante el operador posicional "$" en la sección "El operador posicional $" de la documentación "Actualización".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Una palabra de precaución:por lo general, es más común que todos los documentos incrustados coincidan con la misma estructura, de modo que sea más fácil hacer referencia a los documentos incrustados individuales. Su matriz de "ventas" es un buen ejemplo de esto; cada documento incrustado contiene las mismas claves, "sno", "mensaje" y "estado"

Sin embargo, los documentos incrustados dentro de su matriz "act_mgr" contienen claves diferentes; el primero contiene "ventas" y el segundo contiene "desarrollador". En su lugar, tal vez considere la siguiente estructura:

"act_mgr" : [
    {
        "title" : "sales",
        "agent" : [
            "[email protected]",
            "[email protected]"
        ],
        "last_interacted" : "[email protected]"
    },
    {
        "title": "developer",
        "agent" : [
            "[email protected]"
        ],
        "last_interacted" : "[email protected]"
    }
]

Ahora, cada documento incrustado contiene las mismas claves, "título", "agente" y "último_interactuado".

Puede actualizar los subdocumentos con el siguiente comando.

> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})

Con suerte, esto le permitirá realizar las actualizaciones que necesita, y tal vez le dé algo de reflexión sobre el diseño del esquema. ¡Buena suerte!