sql >> Database >  >> NoSQL >> MongoDB

Gegevens invoegen in geneste array in mongodb

U kunt het ingesloten "sales"-document in de "act_mgr"-array bijwerken met de volgende update-instructie:

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

U kunt het ingesloten document met de "ontwikkelaar"-informatie als volgt aan de array toevoegen:

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

De documentatie over de $push en $set modifiers kan gevonden worden in de "Updating" documentatie:http ://www.mongodb.org/display/DOCS/Updating

Meer informatie over het maken en bijwerken van ingesloten documenten met Mongo db is te vinden in de documentatie met de titel "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

Informatie over het bijwerken van ingesloten documenten met behulp van de positionele operator "$" is te vinden in het gedeelte "The $ positionele operator" van de documentatie bij "Updating".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Een woord van waarschuwing:het is over het algemeen gebruikelijker dat ingesloten documenten allemaal dezelfde structuur hebben, zodat er gemakkelijker naar individuele ingesloten documenten kan worden verwezen. Uw "sales"-array is hier een goed voorbeeld van; elk ingesloten document bevat dezelfde sleutels, "sno", "message" en "status"

De ingesloten documenten in uw "act_mgr"-array bevatten echter verschillende sleutels; de eerste bevat "verkoop" en de tweede bevat "ontwikkelaar". Overweeg in plaats daarvan misschien de volgende structuur:

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

Elk ingesloten document bevat nu dezelfde sleutels, "title", "agent" en "last_interacted".

U kunt subdocumenten bijwerken met de volgende opdracht.

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

Hopelijk stelt dit je in staat om de updates uit te voeren die je nodig hebt, en misschien geeft het je wat stof tot nadenken over het ontwerpen van schema's. Veel succes!




  1. Haal de retourwaarde van de functie Reactivemongo findAndUpdate op

  2. vreemde mongodb en mangoest-fout:niet meester en slaafOk =valse fout

  3. mongodb versie 3.0.0 client robomongo mongovue

  4. Kan geen verbinding maken met MongoLab auth mislukt fout