MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Fügen Sie Daten in ein verschachteltes Array in Mongodb ein

Sie können das eingebettete „Sales“-Dokument innerhalb des „act_mgr“-Arrays mit der folgenden Update-Anweisung aktualisieren:

> 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"
        }
    ]
}
> 

Sie können das eingebettete Dokument, das die "Entwickler"-Informationen enthält, folgendermaßen zum Array hinzufügen:

> 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"
        }
    ]
}
> 

Die Dokumentation zu den $push- und $set-Modifikatoren finden Sie in der „Updating“-Dokumentation:http ://www.mongodb.org/display/DOCS/Updating

Weitere Informationen zum Erstellen und Aktualisieren eingebetteter Dokumente mit Mongo db finden Sie in der Dokumentation mit dem Titel „Dot Notation (Reaching into Objects)“https://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Informationen zum Aktualisieren eingebetteter Dokumente mit dem Positionsoperator "$" finden Sie im Abschnitt "Der Positionsoperator $" der Dokumentation "Aktualisieren".
https://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Ein Wort der Vorsicht:Es ist im Allgemeinen üblicher, dass eingebettete Dokumente alle dieselbe Struktur aufweisen, sodass einzelne eingebettete Dokumente leichter referenziert werden können. Ihr Array "sales" ist ein gutes Beispiel dafür; Jedes eingebettete Dokument enthält dieselben Schlüssel, "sno", "message" und "status"

Die eingebetteten Dokumente in Ihrem „act_mgr“-Array enthalten jedoch unterschiedliche Schlüssel; die erste enthält „Vertrieb“ und die zweite „Entwickler“. Betrachten Sie stattdessen vielleicht die folgende Struktur:

"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"
    }
]

Jetzt enthalten alle eingebetteten Dokumente die gleichen Schlüssel, „title“, „agent“ und „last_interacted“.

Sie können Unterdokumente mit dem folgenden Befehl aktualisieren.

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

Hoffentlich ermöglicht Ihnen dies, die erforderlichen Aktualisierungen vorzunehmen, und gibt Ihnen vielleicht einen Denkanstoß bezüglich des Schemadesigns. Viel Glück!