MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Inserir dados na matriz aninhada no mongodb


Você pode atualizar o documento "sales" incorporado dentro da matriz "act_mgr" com a seguinte instrução de atualização:
> 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"
        }
    ]
}
> 

Você pode adicionar o documento incorporado contendo as informações do "desenvolvedor" à matriz da seguinte forma:
> 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"
        }
    ]
}
> 

A documentação sobre os modificadores $push e $set pode ser encontrada na documentação "Atualizando":http ://www.mongodb.org/display/DOCS/Atualização

Mais informações sobre como criar e atualizar documentos incorporados com o Mongo db podem ser encontradas na documentação intitulada "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Informações sobre a atualização de documentos incorporados usando o operador posicional "$" podem ser encontradas na seção "O operador posicional $" da documentação "Atualizando".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Uma palavra de cautela:geralmente é mais comum que todos os documentos incorporados correspondam à mesma estrutura, para que os documentos incorporados individuais possam ser referenciados mais facilmente. Sua matriz "vendas" é um bom exemplo disso; cada documento incorporado contém as mesmas chaves, "sno", "mensagem" e "status"

No entanto, os documentos incorporados dentro de sua matriz "act_mgr" contêm chaves diferentes; o primeiro contém "vendas" e o segundo contém "desenvolvedor". Em vez disso, talvez considere a seguinte estrutura:
"act_mgr" : [
    {
        "title" : "sales",
        "agent" : [
            "[email protected]",
            "[email protected]"
        ],
        "last_interacted" : "[email protected]"
    },
    {
        "title": "developer",
        "agent" : [
            "[email protected]"
        ],
        "last_interacted" : "[email protected]"
    }
]

Agora, cada documento incorporado contém as mesmas chaves, "título", "agente" e "last_interacted".

Você pode atualizar subdocumentos com o seguinte comando.
> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})

Espero que isso permita que você faça as atualizações necessárias e, talvez, dê a você um pouco de reflexão sobre o design do esquema. Boa sorte!