varios una sumar insertar framework ejemplo documentos crear consultas complejas comandos coleccion agrupar agregacion mongodb max

una - insertar varios documentos en mongodb



mongodb cómo obtener el valor máximo de las colecciones (6)

Tengo una colección mongodb como:

db.kids.find() //results [ {name:''tom'', age:10}, {name:''alice'', age:12}, .... ]

Necesito una consulta para obtener MAX ''age'' de esta colección como en SQL: SELECT MAX(age) FROM kids WHERE 1


¿Qué pasa con el uso de marco agregado:

db.collection.aggregate({ $group : { _id: null, max: { $max : "$age" }}});


El rendimiento de la respuesta sugerida está bien. De acuerdo con la documentación de MongoDB :

Cuando una clasificación de $ precede inmediatamente a un límite de $ , el optimizador puede fusionar el límite de $ en la clasificación de $. Esto permite que la operación de clasificación mantenga solo los n resultados principales a medida que avanza, donde n es el límite especificado y MongoDB solo necesita almacenar n elementos en la memoria.

Cambiado en la versión 4.0.

Entonces en el caso de

db.collection.find().sort({age:-1}).limit(1)

obtenemos solo el elemento más alto SIN ordenar la colección debido a la optimización mencionada.


Puede ver lo que está haciendo el optimizador ejecutando un plan. El formato genérico de buscar en un plan es de la documentation MongoDB. es decir, Cursor.plan (). Si realmente quiere profundizar más, puede hacer un cursor.plan (verdadero) para obtener más detalles.

Dicho esto, si tiene un índice, su db.col.find (). Sort ({"field": - 1}). Limit (1) leerá una entrada de índice, incluso si el índice es ascendente predeterminado y desea la entrada máxima y un valor de la colección.

En otras palabras, las sugerencias de @yogesh son correctas.

Gracias Sumit


puedes usar group y max:

db.getCollection(''kids'').aggregate([ { $group: { _id: null, maxQuantity: {$max: "$age"} } } ])


Como uno de los comentarios :

db.collection.find().sort({age:-1}).limit(1) // for MAX db.collection.find().sort({age:+1}).limit(1) // for MIN

es completamente utilizable pero no estoy seguro sobre el rendimiento


Explicación simple, si tiene una respuesta mongo query similar a la siguiente, y solo desea el valor más alto de Array-> "Date"

{ "_id": "57ee5a708e117c754915a2a2", "TotalWishs": 3, "Events": [ "57f805c866bf62f12edb8024" ], "wish": [ "Cosmic Eldorado Mountain Bikes, 26-inch (Grey/White)", "Asics Men''s Gel-Nimbus 18 Black, Snow and Fiery Red Running Shoes - 10 UK/India (45 EU) (11 US)", "Suunto Digital Black Dial Unisex Watch - SS018734000" ], "Date": [ "2017-02-13T00:00:00.000Z", "2017-03-05T00:00:00.000Z" ], "UserDetails": [ { "createdAt": "2016-09-30T12:28:32.773Z", "jeenesFriends": [ "57edf8a96ad8f6ff453a384a", "57ee516c8e117c754915a26b", "58a1644b6c91d2af783770b0", "57ef4631b97d81824cf54795" ], "userImage": "user_profile/Male.png", "email": "[email protected]", "fullName": "Roopak Kapoor" } ], },

*** Entonces tienes agregar

Latest_Wish_CreatedDate: {$ max: "$ Date"},

algo como abajo-

{ $project : { _id: 1, TotalWishs : 1 , wish:1 , Events:1, Wish_CreatedDate:1, Latest_Wish_CreatedDate: { $max: "$Date"}, } }

Y la respuesta de consulta final estará debajo

{ "_id": "57ee5a708e117c754915a2a2", "TotalWishs": 3, "Events": [ "57f805c866bf62f12edb8024" ], "wish": [ "Cosmic Eldorado Mountain Bikes, 26-inch (Grey/White)", "Asics Men''s Gel-Nimbus 18 Black, Snow and Fiery Red Running Shoes - 10 UK/India (45 EU) (11 US)", "Suunto Digital Black Dial Unisex Watch - SS018734000" ], "Wish_CreatedDate": [ "2017-03-05T00:00:00.000Z", "2017-02-13T00:00:00.000Z" ], "UserDetails": [ { "createdAt": "2016-09-30T12:28:32.773Z", "jeenesFriends": [ "57edf8a96ad8f6ff453a384a", "57ee516c8e117c754915a26b", "58a1644b6c91d2af783770b0", "57ef4631b97d81824cf54795" ], "userImage": "user_profile/Male.png", "email": "[email protected]", "fullName": "Roopak Kapoor" } ], "Latest_Wish_CreatedDate": "2017-03-05T00:00:00.000Z" },