在 Mongo 中结合 $regex 和 $or 运算符 [英] Combining $regex and $or operators in Mongo

查看:42
本文介绍了在 Mongo 中结合 $regex 和 $or 运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想同时使用 $or$regex 运算符.

I want to use $or and $regex operators same time.

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

使用 $regex 工作正常:

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

当引入$或时,响应被改变.我期待同样的回应:

When introducing $or, the response is changed. I expected the same response:

> 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 to change the order of the operators:

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

不过,下面的查询好像没问题,只是有点长(name 重复了):

However, it seems that following query works fine, but it's a little bit long (name is repeated):

> 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 ?

Is there any shorter way to use $regex and $or in queries like this?

目标是使用 $regex 运算符而不是 /.../ (真正的正则表达式).

The goal is to use $regex operator and not /.../ (real regular expressions).

推荐答案

$or 运算符期望整个条件,因此正确的形式是:

The $or operator expects whole conditions so the correct form would be:

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

或者当然使用 $in:

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

但它是一个正则表达式,所以你可以这样做:

But it's a regex so you can do:

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

这篇关于在 Mongo 中结合 $regex 和 $or 运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆