I want to use the $or and $regex operators at the same time.
db.users.insert([{name: "Alice"}, {name: "Bob"}, {name: "Carol"}, {name: "Dan"}, {name: "Dave"}])
Using $regex works fine:
> db.users.find({name: {$regex: "^Da"}}) { "_id" : ObjectId("53e33682b09f1ca437078b1d"), "name" : "Dan" } { "_id" : ObjectId("53e33682b09f1ca437078b1e"), "name" : "Dave" }
When you enter $or answer changes. I expected the same answer:
> 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" }
I also tried changing the order of the statements:
> db.users.find({name: {$or: [{$regex: "^Da"}, {$regex: "^Ali"}]}}) error: { "$err" : "invalid operator: $or", "code" : 10068 }
However, the following query seems to work fine, but it's a little long ( name repeats):
> 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" }
Is there a shorter way to use $regex and $or in such queries?
The goal is to use the $regex operator, and not /.../ (real regular expressions).
regex mongodb mongodb-query
Ionicฤ Bizฤu
source share