복붙노트

[MONGODB] 몽고에서 $ 정규식 및 $ 또는 연산자를 결합

MONGODB

몽고에서 $ 정규식 및 $ 또는 연산자를 결합

나는 $ 또는 및 $ 정규식 연산자 같은 시간을 사용하고 싶습니다.

$ 정규식을 사용하면 잘 작동합니다 :

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

$를 도입하거나 할 때 응답이 변경됩니다. 나는 동일한 응답을 기대 :

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

그러나, 다음 쿼리는 잘 작동 것 같다,하지만 (이름이 반복) 약간의 비트 길이이다 :

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

$ 정규식 및 $ 또는 같은 쿼리를 사용하기 위해 짧은 방법이 있습니까?

목표는 $ 정규식 연산자가 아닌 /.../ (실제 정규 표현식)를 사용하는 것입니다.

해결법

  1. ==============================

    1.올바른 형태가 될 것이다 있도록 $ 또는 운영자는 모든 조건을 기대 :

    올바른 형태가 될 것이다 있도록 $ 또는 운영자는 모든 조건을 기대 :

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

    또는 과정에서 $를 사용 :

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

    그러나 당신이 할 수 있도록 정규식입니다 :

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

    2.그것은 오랜만입니다. 그러나, 나는 아래의 쿼리와 같은 정규식 쿼리의 경우를 구분을 추가합니다. 이름은 대문자로 데이터베이스에 저장된 경우, 그래서 그것은 중요하지 않습니다 :

    그것은 오랜만입니다. 그러나, 나는 아래의 쿼리와 같은 정규식 쿼리의 경우를 구분을 추가합니다. 이름은 대문자로 데이터베이스에 저장된 경우, 그래서 그것은 중요하지 않습니다 :

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

    희망이 도움이

  3. from https://stackoverflow.com/questions/25177645/combining-regex-and-or-operators-in-mongo by cc-by-sa and MIT license