Esto devolverá documentos donde el field1 es mayor que el field2
collection.find( { $expr: { $gt: [ "$field1" , "$field2" ] } } )
Quiero obtener documentos donde la diferencia entre el field1 1 y field2 sea mayor o menor que 20. ¿Se puede hacer eso?
algo como esto.
{ match: { $expr: { { $expr: { $gt: [ $subtract: ["$field1", "$field2"], 20 ] } } } } }no buscando una solución de agregación
Sí, puede usar una consulta similar a la que ya está haciendo, solo tiene que verificar en ambos sentidos field1 - field2 > 20 o field2 - field1 > 20 .
Puede lograr esto fácilmente usando $abs (absolute(field1 - field2) > 20) , así:
db.collection.find({ $expr: { $gt: [ { $abs: { $subtract: [ "$field1", "$field2" ] } }, 20 ] } })