tengo el siguiente documento:
{ _id: 12, item: 'envelope', qty: ISODate("2021-12-05T00:00:00.000Z"), arrayField: [ 128, 190, 1 ] }y trato de actualizarlo usando este comando
products> db.products.update({_id:12},{$max : { arrayField : [1,190,1879]} })la salida es la siguiente:
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 0, upsertedCount: 0 }Realmente no entiendo cómo se realiza la comparación entre el arrayField existente y el nuevo. Ambos son matrices, por lo que debería haber algún tipo de comparación en cada elemento, pero ¿cómo funciona exactamente?
De la documentación leí esto:
Con matrices, una comparación menor que o una ordenación ascendente compara el elemento más pequeño de las matrices, y una comparación mayor que o una ordenación descendente compara el elemento más grande de las matrices. Como tal, cuando se compara un campo cuyo valor es una matriz de un solo elemento (p. ej., 1 ) con campos que no son matrices (p. ej., 2), la comparación es entre 1 y 2. Una comparación de una matriz vacía (p. ej., [ ]) trata el matriz vacía como menos que nulo o como un campo faltante.
Pero todavía no entiendo exactamente... ¿Alguien podría dar un ejemplo en mi caso? Gracias por adelantado
MongoDB toma el mínimo o el máximo, para representar la matriz en las comparaciones, para los operadores de consulta.
Números
{"ar" : [1,2,3]} (<= ar 1) => (<= min(1,2,3) 3) => (<= 1 3) true (>= ar 3) => (>= max(1,2,3) 3) => (<= 3 3) true (= ar 2) => true because it contains the element For empty arrays either < or > its always false compared to a numberMatrices (nuevamente tome el min si <, o max it >)
{"ar" : [1,2,3]} (<= ar [0 1 2 3]) false because its like min(ar)=1 <min(0,1,2,3)=0 (= ar [1]) false we need all elements =Para la actualización del operador $max
if both are arrays => elements are compared one by one. max [1 2 3] [5] => [5] max [1 2] [1 2 -100] => [1 2 -100] Esos son solo para los operadores de consulta $gte,$gt,$lt,$lte, $eq .
Los agregados con los mismos nombres son estrictos y no funcionan así.
* No es completo porque tenemos muchos tipos, creo que los anteriores están bien, la respuesta podría ayudar, era grande para encajar en los comentarios.