Esta crónica fue probado por nuestros especialistas así se garantiza la veracidad de este enunciado.
Solución:
Puede utilizar la siguiente consulta de agregación.
$$ROOT
para mantener el documento completo por cada nombre seguido de $replaceRoot
para promocionar el documento a la parte superior.
db.col.aggregate([
"$group":"_id":"$name","doc":"$first":"$$ROOT",
"$replaceRoot":"newRoot":"$doc"
])
Cuando agrupa datos en cualquier base de datos, significa que desea realizar una operación acumulada en el campo requerido y el otro campo que no se incluirá en la operación acumulada se usará en grupo como
db.collection.aggregate([
$group:
_id: field1: "", field1: "" ,
acc: $sum: 1
]
aquí en el objeto _id contendrá todos los demás campos que desea retener.
para tus datos puedes probar esto
db.collection.aggregate([
$group:
_id: "$name",
rating: $first: "$rating" ,
tags: $first: "$tag" ,
docid: $first: "$_id"
,
$project:
_id: "$docid",
name: "$_id",
rating: 1,
tags: 1
])
La solución de user2683814 funcionó para mí, pero en mi caso, tengo un acumulador de contador cuando reemplazamos el objeto newRoot, falta el campo de conteo en la etapa final, así que he usado $mergeObjects
operador para recuperar mi campo de conteo.
db.collection.aggregate([
$group:
_id: '$product',
detail: $first: '$$ROOT' ,
count:
$sum: 1,
,
,
,
$replaceRoot:
newRoot: $mergeObjects: [ count: '$count' , '$detail'] ,
,
])
Si guardas alguna cuestión o forma de avanzar nuestro artículo eres capaz de escribir una reseña y con gusto lo interpretaremos.