Ion*_*zău 10 regex mongodb mongodb-query
我想同时使用$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" }
Run Code Online (Sandbox Code Playgroud)
介绍时$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" }
Run Code Online (Sandbox Code Playgroud)
我还试图改变运营商的顺序:
> db.users.find({name: {$or: [{$regex: "^Da"}, {$regex: "^Ali"}]}})
error: { "$err" : "invalid operator: $or", "code" : 10068 }
Run Code Online (Sandbox Code Playgroud)
但是,似乎以下查询工作正常,但它有点长(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" }
Run Code Online (Sandbox Code Playgroud)
有没有更短的使用方式$regex和这样$or的查询?
目标是使用$regexoperator而不是/.../(真正的正则表达式).
Nei*_*unn 22
该$or运营商预计,整个条件,正确的形式是:
db.users.find({ "$or": [
{ "name": { "$regex": "^Da"} },
{ "name": { "$regex": "^Ali" }}
]})
Run Code Online (Sandbox Code Playgroud)
或者当然使用$in:
db.users.find({ "name": { "$in": [/^Da/,/^Ali/] } })
Run Code Online (Sandbox Code Playgroud)
但它是一个正则表达式,所以你可以这样做:
db.users.find({ "name": { "$regex": "^Da|^Ali" } })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8022 次 |
| 最近记录: |