itsource

MongoDB에서 배열의 n번째 요소 가져오기

mycopycode 2023. 5. 17. 22:57
반응형

MongoDB에서 배열의 n번째 요소 가져오기

MongoDB에 있는 문서의 일부로 객체 배열을 저장하고 있습니다.예를 들어 배열의 4번째 요소에 대해서만 쿼리하려면 어떻게 해야 합니까?그래서 저는 전체 배열을 제거하는 것이 아니라 4번째 요소만 제거하는 것을 원합니다.

사용하다$slice.

db.foo.find({ bar : "xyz" } , { my_array : { $slice : [n , 1] } } )

foo 컬렉션에 있는 모든 문서의 배열 "my_array"의 n번째 요소인 bar = "xyz"를 검색합니다.

MongoDB 설명서의 다른 예는 다음과 같습니다.

db.posts.find({}, {comments:{$slice: 5}}) // first 5 comments
db.posts.find({}, {comments:{$slice: -5}}) // last 5 comments
db.posts.find({}, {comments:{$slice: [20, 10]}}) // skip 20, limit 10
db.posts.find({}, {comments:{$slice: [-20, 10]}}) // 20 from end, limit 10

여기에서 읽을 수 있는 정보: http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

MongoDB 3.2의 new 연산자를 사용하여 지정된 배열 인덱스에서 요소를 반환할 수 있습니다.


데모:

바스켓이라는 이름의 컬렉션에는 다음과 같은 문서가 포함되어 있습니다.

{
    "_id" : ObjectId("578f326f6db61a299a383c5a"),
    "fruits" : [
        "apple",
        "mango",
        "banana",
        "apricot",
        "cherry"
    ]
}

다음 쿼리는 인덱스에서 요소를 반환합니다.-2(두 번째 요소) "sublish" 배열에 있습니다.

db.baskets.aggregate(
    [
        { "$project": { "matched": { "$arrayElemAt": [ "$fruits", 1 ] } } } 
    ] 
)

그것이 생산하는.

{ 
    "_id" : ObjectId("578f326f6db61a299a383c5a"), 
    "matched" : "mango" 
}

그리고 다음은 배열의 마지막 요소 앞에 있는 요소를 쿼리합니다. 따라서 인덱스에 있는 요소입니다.-2

db.baskets.aggregate(
    [
        { "$project": { "matched": { "$arrayElemAt": [ "$fruits", -2 ] } } } 
    ] 
)

다음과 같은 결과:

{ 
    "_id" : ObjectId("578f326f6db61a299a383c5a"), 
    "matched" : "apricot" 
}

이렇게 하는 또 다른 방법은 업데이트 배열 구문을 사용하는 것입니다.여기서,contribs.1의 두 번째 요소를 설정합니다.contribs값을 가질 배열ALGOL 58(업데이트 구문의 설명서 페이지에서 가져온 것)

db.bios.update(
   { _id: 1 },
   { $set: { 'contribs.1': 'ALGOL 58' } }
)

언급URL : https://stackoverflow.com/questions/7223273/get-n-th-element-of-an-array-in-mongodb

반응형