Non credo che ci sia ancora un modo per farlo, a parte l'iterazione manuale dei documenti e il controllo di ogni valore nell'array. Sarà piuttosto lento perché deve eseguire JavaScript su ogni documento e non può sfruttare alcun indice su col.values
.
Anche un $dove
La query dell'espressione JavaScript non sembra funzionare qui perché, probabilmente perché la query contiene un callback ed è troppo complessa:
db.col.find("this.values.every(function(v) { return (v > 1 && v < 5) })")
Modifica: Per alcune query, inclusa questa, JavaScript $dove l'espressione ha bisogno di un'istruzione return, quindi funziona bene:
db.col.find("return this.values.every(function(v) { return (v > 1 && v < 5) })")