university tutorial example descargar caracteristicas mongodb

mongodb - tutorial - Grupo Mongo y empuje: empujando todos los campos.



mongodb university (3)

En realidad, no puede lograr lo que está diciendo, necesita $unwind

db.collection.aggregate([ {$unwind: "$books"}, {$group: { _id: "$author", books:{$push: { author:"$books.author", title:"$books.title", price:"$books.price", pages:"$books.pages" }}, }} ])

Así es como tratas con matrices en agregación.

Y lo que está buscando para hacer un acceso directo al escribir todos los campos aún no existe .

Pero específicamente debido a lo que tiene que hacer, entonces no podría hacer eso de todas formas, ya que de alguna manera está reformando el documento.

¿Hay una manera fácil de "empujar" todos los campos de un documento? Por ejemplo:

Digamos que tengo una colección de libros de Mongo:

{author: "tolstoy", title:"war & peace", price:100, pages:800} {author: "tolstoy", title:"Ivan Ilyich", price:50, pages:100}

Me gustaría agruparlos por autor: para cada autor, haga una lista de los objetos de su libro completo :

{ author: "tolstoy", books: [ {author: "tolstoy", title:"war & peace", price:100, pages:800} {author: "tolstoy", title:"Ivan Ilyich", price:50, pages:100} ] }

Puedo lograr esto empujando explícitamente todos los campos:

{$group: { _id: "$author", books:{$push: {author:"$author", title:"$title", price:"$price", pages:"$pages"}}, }}

Pero ¿hay algún atajo, algo en las líneas de:

// Fictional syntax... {$group: { _id: "$author", books:{$push: "$.*"}, }}



Si el problema es que no desea escribir explícitamente todos los campos (si su documento tiene muchos campos y los necesita todos como resultado), también podría intentar hacerlo con Map-Reduce:

db.books.mapReduce( function () { emit(this.author, this); }, function (key, values) { return { books: values }; }, { out: { inline: 1 }, finalize: function (key, reducedVal) { return reducedVal.books; } } )