MongoDb: Comment insérer un objet supplémentaire dans la collection d'objets?

j'ai un document "propriétaire" qui peut avoir "n" nombre de camps et camps ont "instructeurs" et instructeurs ont "classes". Plus tôt, j'ai essayé d'accomplir ceci avec des tableaux emboîtés (voir le lien à mon post ci-dessous), mais j'ai appris que l'opérateur de position "$" ne niche pas si profond. MongoDB: Ajouter un tableau dans un tableau existant

Toutefois, j'ai appris que la solution serait d'utiliser des collections d'objets au lieu des tableaux. Je suppose que je dois utiliser "update "avec" $set "pour ajouter" camps " supplémentaires, cependant chaque fois que je fais tout ce qu'il fait est d'écraser(mise à jour) le camp précédent qui a été inséré.

ci-dessous se trouve la structure hiérarchique que j'essaie d'accomplir:

owner = {

    firstName: 'john',
    lastName: 'smith',
    ownerEmail: 'john.smith@gmail.com',

    camps : {

        {
            name: 'cubs-killeen',
            location: 'killeen'
        },

        {
            name: 'cubs-temple',
            location: 'temple'
        },

        instructors : {

            {
                firstName: 'joe',
                lastName : 'black'
            },

            {
                firstName: 'will',
                lastName : 'smith'
            }        
        }

    }

}

j'ai aussi essayé le code suivant:

db.owners.update({ownerEmail:'john.smith@gmail.com'}, {$set: { camps:{ {name:'cubs-killeen'} } }})

mais cela provoque une erreur d'identification { inattendue.

toute aide avec quelques exemples de commandes mongo pour atteindre la structure ci-dessus serait la plus apprécier.

V / R

Chris

12
demandé sur Community 2013-06-25 06:58:52

1 réponses

    {
    "_id" : ObjectId("51c9cf2b206dfb73d666ae07"),
    "firstName" : "john",
    "lastName" : "smith",
    "ownerEmail" : "john.smith@gmail.com",
    "camps" : [
            {
                    "name" : "cubs-killeen",
                    "location" : "killeen"
            },
            {
                    "name" : "cubs-temple",
                    "location" : "temple"
            }
    ],
    "instructors" : [
            {
                    "firstName" : "joe",
                    "lastName" : "black"
            },
            {
                    "firstName" : "will",
                    "lastName" : "smith"
            }
    ]
}

et

db.stack.update(
  { ownerEmail: "john.smith@gmail.com" },
  {
    $push: {
      camps: { name: "cubs-killeen", location: "some other Place" }
    }
  }
);

ayant ceci, vous pouvez ajouter des camps comme ceci:

j'Espère que ça aide.

19
répondu AntonioOtero 2017-07-03 02:26:15