2012-04-10 5 views
0

내 항목은 다음과 같이 MongoDB를 보관 방법 :, 50008064을 :MongoDB에서 이것을 어떻게 쿼리합니까?

{"ProductName":"XXXX", 
    "Catalogs" : [ 
    { 
     "50008064" : "Apple" 
    }, 
    { 
     "50010566" : "Box" 
    }, 
    { 
     "50016422" : "Water" 
    } 
]} 

가 지금은 모든 항목이 속한 카탈로그에 쿼리 싶어? (카탈로그 ID "50008064", 카탈로그 이름 "Apple")

답변

3

데이터를 효율적으로 쿼리 할 수없고 데이터가 커질수록 성능이 떨어집니다. 따라서 나는 그것을 스키마 버그를 고려할 것이라고 및/리팩토링 색인을 허용 않는 다음과 같은 모델로 마이그레이션해야합니다

{"ProductName":"XXXX", 
    "Catalogs" : [ 
    { 
     id : "50008064", 
     value : "Apple" 
    }, 
    { 
     id : "50010566", 
     value : "Box" 
    }, 
    { 
     id : "50016422", 
     value : "Water" 
    } 
]} 

그리고 지수 : 다시

ensureIndex({'Catalogs.id':1}) 

을, 난 강력하게 변경 제안 스키마는 잠재적 인 성능 병목 현상이므로 다른 방법으로는 수정할 수 없습니다.

+0

카탈로그를 쿼리하는 방법은 무엇입니까? 이렇게하면? db.products.find ({ "Catalogs.50008064": {$ exists : true}}) – ericyue

+0

아니오, db.products.find ({ 'Catalogs.id': 50008064})와 같이 빠릅니다. –

0

이것은 아마도 the entry here에 따라 작동해야합니다. 링크에 명시된 것처럼 빠르지는 않습니다.

db.products.find({ "Catalogs.50008064" : { $exists: true } }) 
관련 문제