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"}
}
}
])
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"
},