2011-03-04 3 views
2
var jd = { 
    type: "Person", 
    attributes: { 
    name: "John Doe", 
    age: 30 
    } 
}; 

var pd = { 
    type: "Person", 
    attributes: { 
    name: "Penelope Doe", 
    age: 26 
    } 
}; 

var ss = { 
    type: "Book", 
    attributes: { 
    name: "The Sword Of Shannara", 
    author: "Terry Brooks" 
    } 
}; 

db.things.save(jd); 
db.things.save(pd); 
db.things.save(ss); 
db.things.ensureIndex({attributes: 1}) 
db.things.find({"attributes.age": 30}) // => John Doe 
db.things.find({"attributes.age": 30}).explain() // => BasicCursor... (don't want a scan) 
db.things.find({"attributes.age": {$gte: 18}) // John Doe, Penelope Doe (via a scan) 

목표는 범위 쿼리를 통해 모든 속성을 색인화하고 검색 할 수 있으며 색인을 실제로 사용한다는 것입니다 (모음 스캔과 반대 됨). 문서에 어떤 속성이 있는지 알려주지는 않습니다. 멀티 키에 대해 읽었지만 정확히 일치하는 쿼리 만 (인덱스로) 작동하는 것처럼 보입니다.MongoDB : 멀티 키를 사용하여 범위 쿼리를 사용할 수 있습니까?

Multikeys는 문서의 형식을 선호 : 나는 범위를 사용하여 속성으로 항목을 찾을 수 있습니다 하나 개의 인덱스에 의해 패턴이

var pd = { 
    type: "Person", 
    attributes: [ 
    {name: "Penelope Doe"}, 
    {age: 26} 
    ] 
}; 

있습니까?

편집 :

잠재적 유형의 무한한 배열을 가지고 의미가 스키마없는 DB에서

, 아직 컬렉션 이름은 실질적 유형의 일종을 의미한다. 그러나 극단적 인 경우에는 컬렉션에 원하는 수의 유형을 허용하고자합니다 (따라서 사용자가 상상할 수있는 모든 사용자 정의 유형에 대한 모음을 정의 할 필요가 없습니다). 따라서 하나의 깊은 인덱스 (원거리 쿼리를 지원하는)를 가진 (모든 종류의) 속성에 의한 검색은 이런 종류의 일을 훨씬 더 실현 가능하게 만든다. 스키마리스 DB에 자연 스럽습니다.

http://jira.mongodb.org/browse/SERVER-2675

+1

http://groups.google.com/group/mongodb-user에서이 질문을 게시하고 개발자의 답변을 얻을 수 있습니다. * 매우 반응이 좋습니다. –

+0

팁 주셔서 감사. 나는 그랬어. :) – Mario

답변

-3

범위 쿼리 multikeys를 사용 가능 시도; 그러나 쿼리를 표현하는 것은 까다로울 수 있습니다.

0

예 범위 쿼리 multikeys 작업 : 당신이 그것을 투표 싶다면

티켓을 열었다. 그러나 멀티 키는 임베디드 객체보다는 배열을위한 것입니다. 예에서

db.things.ensureIndex({"attributes.age": 1}) 
+0

목표는 "연령"또는 특정 속성의 색인 생성을 피하는 것이 아니라 모든 "속성"색인을 생성하는 것입니다. 요점은 어떤 속성 키 (예 : "dob", "name", "hair_color")를 가질 수 있으며 색인 된 액세스 권한이 있어야한다는 것입니다. – Mario

관련 문제