IT

AND 및 OR을 모두 사용하는 mongodb 쿼리

itgroup 2023. 4. 28. 20:29
반응형

AND 및 OR을 모두 사용하는 mongodb 쿼리

mongodb 쿼리에서 OR과 AND의 조합을 사용할 수 있습니까?

아래 코드가 예상대로 작동하지 않습니다.

db.things.find({
           $and:[
                {$or:[
                     {"first_name" : "john"}, 
                     {"last_name" : "john"}
                ]},
                {"phone": "12345678"}
            ]});

데이터베이스 내용:

> db.things.find();
{ "_id" : ObjectId("4fe8734ac27bc8be56947d60"), "first_name" : "john", "last_name" : "hersh", "phone" : "2222" }
{ "_id" : ObjectId("4fe8736dc27bc8be56947d61"), "first_name" : "john", "last_name" : "hersh", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8737ec27bc8be56947d62"), "first_name" : "elton", "last_name" : "john", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8738ac27bc8be56947d63"), "first_name" : "eltonush", "last_name" : "john", "phone" : "5555" }

위의 쿼리를 쿼리할 때 - 아무것도 얻지 못했습니다!

> db.things.find({$and:[{$or:[{"first_name" : "john"}, {"last_name" : "john"}]},{"phone": "12345678"}]});
>

mongo 1.8.3을 사용하고 있습니다.

db.things.find({
    $and: [
        {
            $or: [
                {"first_name": "john"},
                {"last_name": "john"}
            ]
        },
        {
            "Phone": "12345678"
        }
    ]
})

AND는 두 가지 표현식 배열 또는 전화기를 사용합니다.
OR은 first_name, last_name 두 식을 사용합니다.

그리고.

  • OR

  • 이름

  • 성_이름

  • 전화번호.

참고: MongoDB의 최신 버전으로 업그레이드하십시오.

암시적 AND 연산을 사용하려면 더 짧아야 합니다.

db.things.find({
    $or : [ 
        {"first_name": "john"},
        {"last_name": "john"}
    ],
    "phone": "12345678"         
})

이는 다음과 같은 방식으로 가능합니다(mongodb 3.4).

여기 좋은 예가 있습니다.

https://docs.mongodb.com/manual/reference/operator/query/and/ # 및 여러 개의 설명이 포함된 설명-동일한 설명 지정


db.getCollection('tbl_menu_items').find({)$ 및 : [$or : [ {가격: 0.99}, {가격: 1.99} ] },$or : [ {sale : true }, {qty : {$lt : 20 } ] }]} )

이 쿼리는 다음 위치에 있는 모든 문서를 선택합니다.

가격 필드 값이 0.99 또는 1.99이고, 판매 필드 값이 true 또는 qty 필드 값이 20보다 작습니다.

다음은 $ 및 조건의 예로, $ 또는 쿼리를 사용하여 조건을 일치시킵니다. 예를 들어,

다음 쿼리를 고려하는 중



db.getCollection('tbl_menu_items').find(
'$or':[ {'$and': 
[ {위치: {'$in'}: [ ObjectId("588054c63879f2e767a1d553") ] },is_ryward: 1,points_required_to_message_filename: {'$filename': 500 }}},'$ 및': 
[ {위치: {'$in'}: [ ObjectId("588054c63879f2e767a1d553") ] },is_freebie: 1 } ] }})


이 쿼리는 다음 위치에 있는 모든 문서를 선택합니다.

588054c63879f2e767a1d553의 위치 배열이며 is_ryward = 1 및 points_required_to_required_to_required_required_recision < 500

또는

위치 배열은 588054c63879f2e767a1d553이고 is_freebie입니다.

$와 $는 MongoDB v2.0+에서만 지원된다고 생각합니다.애초에 콘솔이 그 표현을 수용했다는 것이 놀랍습니다.제가 가지고 있는 1.8 서버에 대해 다시 만들어 보겠습니다.

또한 다음에 대한 10Gen의 고급 쿼리 문서를 확인$and.

갱신하다

샘플 데이터를 v1.8x와 v2.0x MongoDB 서버에 모두 입력했습니다.쿼리는 v2.0x에서 작동하고 v1.8x에서는 실패합니다.이것은 문제가 있다는 나의 (그리고 Miikka의) 의심을 확인시켜줍니다.$and서버 버전을 확인할 수 있습니다.

저는 여기 에서 이 문제에 대한 현명한 해결책을 찾았습니다.이것이 도움이 되길 바랍니다.

-SethO

간단히 다음과 같은 질문을 작성할 수 있습니다.

const query = {};
query['phone'] = '12345678';
query['$or'] = [
  { "first_name": "john" },
  { "last_name": "john" }
];
db.things.find(query);

언급URL : https://stackoverflow.com/questions/11196101/mongodb-queries-both-with-and-and-or

반응형