sql >> Databasteknik >  >> NoSQL >> MongoDB

Infoga data i kapslad array i mongodb

Du kan uppdatera det inbäddade "försäljningsdokumentet" i "act_mgr"-arrayen med följande uppdateringssats:

> 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 lägga till det inbäddade dokumentet som innehåller "utvecklarinformationen" till arrayen så här:

> 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 modifierarna $push och $set finns i dokumentationen "Uppdaterar":http ://www.mongodb.org/display/DOCS/Updating

Mer information om att skapa och uppdatera inbäddade dokument med Mongo db finns i dokumentationen med titeln "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Information om att uppdatera inbäddade dokument med positionsoperatorn "$" finns i avsnittet "The $ positional operator" i dokumentationen "Uppdaterar".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Ett varningens ord:Det är i allmänhet vanligare att alla inbäddade dokument matchar samma struktur, så att enskilda inbäddade dokument lättare kan refereras. Din "försäljnings"-array är ett bra exempel på detta; varje inbäddat dokument innehåller samma nycklar, "sno", "meddelande" och "status"

De inbäddade dokumenten i din "act_mgr"-array innehåller dock olika nycklar; den första innehåller "försäljning" och den andra innehåller "utvecklare". Istället kan du kanske överväga följande struktur:

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

Nu innehåller varje inbäddat dokument samma nycklar, "title", "agent" och "last_interacted".

Du kan uppdatera underdokument med följande kommando.

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

Förhoppningsvis kommer detta att tillåta dig att göra de uppdateringar du behöver, och kanske ge dig en tankeställare angående schemadesign. Lycka till!




  1. MongoDB och CodeIgniter

  2. $match i $lookup-resultat

  3. Regex med OR i Java - mongoDB

  4. MongoDB 2dsphere index misslyckas (felformad geometri?)