programing

배열의 첫 번째 항목에서 일치하도록 MongoDB 쿼리

easyjava 2023. 5. 4. 20:44
반응형

배열의 첫 번째 항목에서 일치하도록 MongoDB 쿼리

나는 알고 있습니다.$in배열에서 항목의 존재를 검색하는 연산자이지만 항목이 배열의 첫 번째 위치에 있는 경우에만 일치하는 항목을 찾습니다.

예를 들어:

{
    "_id" : ObjectId("0"),
    "imgs" : [
        "http://foo.jpg",
        "http://bar.jpg",
        "http://moo.jpg",
        ]
},
{
    "_id" : ObjectId("1"),
    "imgs" : [
        "http://bar.jpg",
        "http://foo.jpg",
        "http://moo.jpg",
        ]
}

다음과 유사한 질문을 찾고 있습니다.

db.products.find({"imgs[0]": "http://foo.jpg"})

이렇게 하면 다음을 반환할 수 있습니다.ObjectId("0")하지만 아닙니다.ObjectId("1")배열의 첫 번째 이미지만 확인하기 때문입니다.

어떻게 이를 달성할 수 있습니까?단일 문자열을 포함하는 별도의 필드를 만들 수 있습니다.firstImg하지만 제가 여기서 추구하는 것은 그것이 아닙니다.

당신이 원하는 것을 믿습니다.imgs.0예를 들어, 예제 문서를 보면 다음과 같이 말합니다.db.products.find({"imgs.0": "http://foo.jpg"})

참조 배열 인덱스는 첫 번째 수준 배열에만 사용할 수 있습니다.Mongo는 더 이상 어레이 인덱스 검색을 지원하지 않습니다.

배열 인덱스에 도트 표기법을 사용할 수 있습니다.

db.products.find({"imgs.0": "http://foo.jpg"})

다음은 도트 표기 관련 문서에서 발췌한 것입니다.

MongoDB는 도트 표기법을 사용하여 배열의 요소에 액세스하고 하위 문서의 필드에 액세스합니다.

0 기반 인덱스 위치를 기준으로 배열의 요소에 액세스하려면 배열 이름을 점(.) 및 0 기반 인덱스 위치와 연결하고 따옴표로 묶습니다.

'<array>.<index>'

또한 관련 어레이 설명서에 대한 링크가 있습니다.

언급URL : https://stackoverflow.com/questions/19899299/querying-mongodb-to-match-in-the-first-item-in-an-array

반응형