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

J'ai un document «propriétaire» qui peut avoir «n» nombre de camps et les camps ont des «instructeurs» et les instructeurs ont des «cours». Plus tôt, j'ai essayé de l'accomplir avec des tableaux imbriqués (voir le lien vers ma publication ci-dessous), mais j'ai appris que l'opérateur positionnel "$" ne niche pas en profondeur. MongoDB: Ajout d'un tableau dans un tableau existant

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

Voici la structure hiérarchique que j'essaie d'accomplir:

owner = { firstName: 'john', lastName: 'smith', ownerEmail: '[email protected]', camps : { { name: 'cubs-killeen', location: 'killeen' }, { name: 'cubs-temple', location: 'temple' }, instructors : { { firstName: 'joe', lastName : 'black' }, { firstName: 'will', lastName : 'smith' } } } } 

J'ai également essayé ce qui suit:

 db.owners.update({ownerEmail:'[email protected]'}, {$set: { camps:{ {name:'cubs-killeen'} } }}) 

Mais cela jette un identifiant inattendu {erreur.

Toute aide concernant certains exemples de commandes mongo pour réaliser la structure ci-dessus serait très appréciée.

V / R

Chris

Comme autre mentionné, la structure que vous voulez n'est pas valide. Je recommande la structure suivante pour le document de votre propriétaire:

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

et alors

 db.stack.update( { ownerEmail: "[email protected]" }, { $push: { camps: { name: "cubs-killeen", location: "some other Place" } } } ); 

Cela étant, vous pouvez ajouter des camps comme ceci:

J'espère que cela aide.