배열 내의 내장된 문서 필드에 인덱스를 생성할 수 있습니다. 이러한 인덱스는 배열에 나타나는 특정 포함 필드에 대한 쿼리 성능을 향상시킵니다. 배열 내부의 필드에 인덱스를 생성하면 MongoDB는 해당 인덱스를 다중 키 인덱스로 저장합니다.
인덱스 를 만들려면 db.collection.createIndex() 메서드를 사용합니다. 작업은 다음 프로토타입과 유사해야 합니다.
db.<collection>.createIndex( { <field>: <sortOrder> } )
이 작업에 대하여
이 페이지의 예에서는 이러한 문서가 포함된 inventory 컬렉션을 사용합니다.
db.inventory.insertMany( [ { "item": "t-shirt", "stock": [ { "size": "small", "quantity": 8 }, { "size": "large", "quantity": 10 }, ] }, { "item": "sweater", "stock": [ { "size": "small", "quantity": 4 }, { "size": "large", "quantity": 7 }, ] }, { "item": "vest", "stock": [ { "size": "small", "quantity": 6 }, { "size": "large", "quantity": 1 } ] } ] )
재고가 5개 미만인 품목은 언제든지 추가 재고를 주문해야 합니다. 재정렬할 항목을 찾으려면 stock 배열의 요소에 quantity 5 보다 작은 문서를 쿼리합니다. 이 쿼리의 성능을 향상시키려면 stock.quantity 필드에 인덱스를 생성할 수 있습니다.
절차
다음 작업은 inventory 컬렉션의 stock.quantity 필드에 오름차순 다중 키 인덱스를 생성합니다.
db.inventory.createIndex( { "stock.quantity": 1 } )
stock 에 배열 값이 포함되어 있으므로 MongoDB는 인덱스를 멀티키 인덱스로 저장합니다.
결과
인덱스에는 stock.quantity 필드에 나타나는 각 개별 값에 대한 키가 포함되어 있습니다. 인덱스는 오름차순입니다. 즉, 키가 [ 1, 4, 6, 7, 8, 10 ] 순서로 저장됩니다.
인덱스는 stock.quantity 필드에서 선택하는 쿼리를 지원합니다. 예를 들어, 다음 쿼리는 stock 배열의 요소 중 하나 이상에서 quantity 크기가 5 미만인 문서를 반환합니다.
db.inventory.find( { "stock.quantity": { $lt: 5 } } )
출력:
[ { _id: ObjectId("63449793b1fac2ee2e957ef3"), item: 'vest', stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ] }, { _id: ObjectId("63449793b1fac2ee2e957ef2"), item: 'sweater', stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ] } ]
결과 정렬
인덱스은 다음 쿼리와 같이 stock.quantity 필드에 대한 정렬 작업도 지원합니다.
db.inventory.find().sort( { "stock.quantity": -1 } )
출력:
[ { _id: ObjectId("63449793b1fac2ee2e957ef1"), item: 't-shirt', stock: [ { size: 'small', quantity: 8 }, { size: 'large', quantity: 10 } ] }, { _id: ObjectId("63449793b1fac2ee2e957ef2"), item: 'sweater', stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ] }, { _id: ObjectId("63449793b1fac2ee2e957ef3"), item: 'vest', stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ] } ]
MongoDB는 객체 배열을 내림차순으로 정렬할 때 값이 가장 높은 요소가 있는 필드를 기준으로 정렬합니다.