gpt4 book ai didi

regex - 在 Mongo 中组合 $regex 和 $or 运算符

转载 作者:行者123 更新时间:2023-12-02 00:03:56 24 4
gpt4 key购买 nike

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

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" }

引入$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 - 在 Mongo 中组合 $regex 和 $or 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25177645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com