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

Indsæt data i indlejret array i mongodb

Du kan opdatere det indlejrede "salgs"-dokument inde i "act_mgr"-arrayet med følgende opdateringssætning:

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

Du kan tilføje det indlejrede dokument, der indeholder "udvikler"-oplysningerne til arrayet på følgende måde:

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

Dokumentationen om $push- og $set-modifikatorerne kan findes i "Opdatering"-dokumentationen:http ://www.mongodb.org/display/DOCS/Updating

Flere oplysninger om oprettelse og opdatering af indlejrede dokumenter med Mongo db kan findes i dokumentationen med titlen "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Oplysninger om opdatering af indlejrede dokumenter ved hjælp af positionsoperatoren "$" kan findes i afsnittet "The $ positional operator" i dokumentationen "Opdaterer".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

En advarsel:Det er generelt mere almindeligt, at indlejrede dokumenter alle matcher den samme struktur, så individuelle indlejrede dokumenter lettere kan refereres. Dit "salgs"-array er et godt eksempel på dette; hvert indlejret dokument indeholder de samme nøgler, "sno", "besked" og "status"

De indlejrede dokumenter i dit "act_mgr"-array indeholder dog forskellige nøgler; den første indeholder "salg", og den anden indeholder "udvikler". I stedet kan du måske overveje følgende struktur:

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

Nu indeholder hvert indlejrede dokument de samme nøgler, "title", "agent" og "last_interacted".

Du kan opdatere underdokumenter med følgende kommando.

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

Forhåbentlig vil dette give dig mulighed for at lave de opdateringer, du har brug for, og måske give dig lidt stof til eftertanke angående skemadesign. Held og lykke!




  1. Bulk upsert i MongoDB ved hjælp af mongoose

  2. Ekskluder felter fra resultatet i MongoDB monk

  3. ConnectionMultiplexer.Forbindelsen afbrydes, mens der oprettes forbindelse til redis-serveren

  4. Gemmer en array-egenskab på et Mongoose-skema