2012-07-29 3 views
2

내가 그래서 여기에 예입니다, 즉 정확하게 내 생각을 설명 할 수 아니에요 :MongoDB를 - 배열의 개체에 액세스하는 방법

[ 
    { 
    'description': 'fruits', 
    'examples': [ 
     { 
     'name': 'Apple', 
     'color': ['red', 'green'] 
     }, 
     { 
     'name': 'Banana', 
     'color': 'yellow' 
     } 
    ] 
    }, 
    { 
    'description': 'vegetables', 
    'examples': [ 
     { 
     'name': 'Tomato', 
     'color': 'red' 
     }, 
     { 
     'name': 'Carrot', 
     'color': 'orange' 
     } 
    ] 
    }, 
    { 
    'description': 'Wweets', 
    'examples': [ 
     { 
     'name': 'Chocolate', 
     'color': ['brown', 'black', 'white'] 
     }, 
     { 
     'name': 'Candy', 
     'color': 'various' 
     } 
    ] 
    } 
] 

은의이 단계별로 가자 :

나는 경우, 내가

db.food.find() 

나는 야채를 보려면 다음 명령으로 조회, 모든 식품 범주를보고 싶어

이제 Carrot이 어떻게 생겼는지 (LOL) 잊어 버렸다고합시다. 나는 무엇을해야합니까? 나는 (기본은 MongoDB의 드라이버를 Node.js를) 다음과 같은 시도 :

collection.find({'examples.name': 'Carrot'}, function(err, example){ 
    console.log(example) 
    // It still returns me the whole object! 
}); 

을 내가 MongoDB를 객체의 다음으로 높은 인스턴스를 반환 할 것으로 예상 결과. 예를 들어 나는 이것을하고 싶었다.

console.log(example.color) 
// 'orange' 

생각해보십시오. 나는 문서 지향적 인 DB를 처음 사용한다 :/

+0

안녕하세요, 발견하면 전체 문서를 얻을 수 있습니다. 일부는 얻을 수 없습니다. 그래서, 당신은 문서를 얻고, 당신은 약간의 기능으로 인덱스를 찾는다;) –

+0

이봐,이 작은 기능은 어떻게 생겼지? :) 노드 애플리케이션에서 구현할 수 있습니까? 나는이 모든 것을 처음 접했어. – aydio

+0

aydio의 답변보기;) 그래서이 함수를 사용하여 기본 작업을위한 lib를 만듭니다. 그리고 당신은 필요합니다. ;) 편집 : 오, 너 너 축복이다 –

답변

2

하나의 문서에 많은 수의 객체를 저장할 때 (기본적으로) 전체 문서가 되돌려진다. [*]

문서의 필드 중 하나가 배열 인 경우 일치시키려는 항목이 배열에 있으면 전체 배열을 반환합니다.

일반적으로 모든 것을 하나의 문서로 밀어 넣으려고 유혹에 빠지지 마십시오. "..."

당신은 모든 음식이 "과일"또는 "야채"또는입니다 필드 "유형"을 가지고 음식의 컬렉션을 저장할 수 있습니다 :

는 사용 가능한 대안이있다. 모든 음식이나 "과일"유형의 음식이나 "당근"이름의 음식 만 검색 할 수 있습니다.

배열은 특정 객체/문서의 속성 목록에 좋으며 좋지 않습니다 당신이 그 때 당신이 그 때 일류 목표로 돌아오고 싶다 그 (것)들로 문서를 과음 할 때.

[*] 필드의 일부만을 투사하고 가져 오는 방법이 있지만 여전히 전체 필드를 가져옵니다.

+0

설명해 주셔서 고마워요. 어제 나는 전체 플랫폼 프로그래밍을 거의 끝내었기 때문에 나는 매우 생산적인 하루를 보내고 있다고 생각했지만, 지금은 막혔다. 아마도 내 문서 구조를 다시 생각해야 할 것이다. (아마도 나는 객체 참조를 끝낼 것이다. 그러나 그것은 mongodb의 요점을 놓치지 마라. 다른 솔루션을 찾을 것이다. – aydio

+0

a) 왜 객체 참조가 필요한지 모르겠다. b) mongoDB의 요점을 놓치는 이유를 모르겠다. –

+0

객체 참조 왜냐하면 내 현재 모델은 매우 깊이 중첩되어있어 이와 같은 문제를 유발하기 때문입니다. 내가 아는 한 MongoDB는 데이터를 대응 객체에 저장하는 철학을 따른다.) 그러나 제가 말했듯이 저는 완전히 문서 지향적 인 데이터베이스에 익숙하지 않아 제 말을 너무 진지하게 받아들이지 않습니다 - 단지 배우고 싶습니다 ... – aydio

관련 문제