Combinando $ regex y $ o operadores en Mongo

Quiero usar los operadores $or y $regex mismo tiempo.

db.users.insert([{name: "Alice"}, {name: "Bob"}, {name: "Carol"}, {name: "Dan"}, {name: "Dave"}])

Usar $regex funciona bien:

 > db.users.find({name: {$regex: "^Da"}}) { "_id" : ObjectId("53e33682b09f1ca437078b1d"), "name" : "Dan" } { "_id" : ObjectId("53e33682b09f1ca437078b1e"), "name" : "Dave" } 

Al introducir $or , la respuesta cambia. Esperaba la misma respuesta:

 > db.users.find({name: {$regex: {$or: ["^Da"]}}}) { "_id" : ObjectId("53e33682b09f1ca437078b1a"), "name" : "Alice" } { "_id" : ObjectId("53e33682b09f1ca437078b1b"), "name" : "Bob" } { "_id" : ObjectId("53e33682b09f1ca437078b1c"), "name" : "Carol" } { "_id" : ObjectId("53e33682b09f1ca437078b1d"), "name" : "Dan" } { "_id" : ObjectId("53e33682b09f1ca437078b1e"), "name" : "Dave" } 

También traté de cambiar el orden de los operadores:

 > db.users.find({name: {$or: [{$regex: "^Da"}, {$regex: "^Ali"}]}}) error: { "$err" : "invalid operator: $or", "code" : 10068 } 

Sin embargo, parece que la siguiente consulta funciona bien, pero es un poco larga (se repite el name ):

 > db.users.find({$or: [{name: {$regex: "^Da"}}, {name: {$regex: "^Ali"}}]}) { "_id" : ObjectId("53e33682b09f1ca437078b1a"), "name" : "Alice" } { "_id" : ObjectId("53e33682b09f1ca437078b1d"), "name" : "Dan" } { "_id" : ObjectId("53e33682b09f1ca437078b1e"), "name" : "Dave" } 

¿Hay alguna forma más corta de usar $regex y $or en consultas como esta?

El objective es usar $regex operator y no /.../ (expresiones regulares reales).

El operador $or espera condiciones completas para que la forma correcta sea:

 db.users.find({ "$or": [ { "name": { "$regex": "^Da"} }, { "name": { "$regex": "^Ali" }} ]}) 

O, por supuesto, usando $in :

 db.users.find({ "name": { "$in": [/^Da/,/^Ali/] } }) 

Pero es una expresión regular, así que puedes hacer:

 db.users.find({ "name": { "$regex": "^Da|^Ali" } })