我想同时使用 $or
和 $regex
运算符。
使用 $regex
工作正常:
> db.users.find({name: {$regex: "^Da"}})
{ "_id" : ObjectId("53e33682b09f1ca437078b1d"), "name" : "Dan" }
{ "_id" : ObjectId("53e33682b09f1ca437078b1e"), "name" : "Dave" }
当引入
$or
时,响应发生了变化。我期待同样的回应:> 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" }
我还尝试更改运算符的顺序:
> db.users.find({name: {$or: [{$regex: "^Da"}, {$regex: "^Ali"}]}})
error: { "$err" : "invalid operator: $or", "code" : 10068 }
但是,似乎以下查询工作正常,但有点长(重复
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" }
有没有更短的方法可以在这样的查询中使用
$regex
和 $or
?目标是使用
$regex
运算符而不是 /.../
(真正的正则表达式)。 最佳答案
$or
运算符需要整个条件,因此正确的形式是:
db.users.find({ "$or": [
{ "name": { "$regex": "^Da"} },
{ "name": { "$regex": "^Ali" }}
]})
或者当然使用
$in
:db.users.find({ "name": { "$in": [/^Da/,/^Ali/] } })
但它是一个正则表达式,所以你可以这样做:
db.users.find({ "name": { "$regex": "^Da|^Ali" } })
关于regex - 在 Mongodb 中结合 $regex 和 $or 运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25177645/