2013-05-08 9 views
2

내 문서가 포함 된 mongodb 문서입니다. "이벤트"는 각 문서가 키와 함께 날짜 (예 : Jan 1, 2013)로 저장되고 값이 필드의 묶음 인 문서 목록 (BasicDBList)입니다. 구조가 이렇게 정의되어 일부 날짜에 모든 이벤트가 발생합니다 (예 : Jan 1, 2013).날짜가 mongodb 쿼리에 포함 된 doc 키

  1. 이 문서를 구조화하는 더 나은 방법이 있나요 :

    나는이 개 질문이? 나는 키로 이라는 키가 좋은 아이디어라고 확신하지는 않지만 동시에 나는 으로 모든 문서를 쉽게 검색하여 날짜를 기반으로 메모리에 저장하려고합니다. 문서를 검색 할 때 날짜와 값이 인 Hashtable을 해당 날짜의 문서 목록 (Java 사용)으로 원합니다.

  2. 날짜를 전달하여 문서를 검색하는 방법은 무엇입니까? 예를 들어, 은 2013 년 1 월 1 일을 키로 사용하는 모든 문서를 원합니다. 은 Java로 표시됩니다.

    { 
        "_id": { 
        "_time": 1367928493, 
        "_machine": -1914548796, 
        "_inc": -1784811303, 
        "_new": false 
        }, 
        "email": "[email protected]", 
        "events": { 
        "Jan 1, 2013": [ 
         { 
         "desc": "My Desc", 
         "title": "My Title", 
         "createDateTime": "May 7, 2013 8:08:13 AM", 
         "updateDateTime": "May 7, 2013 8:08:13 AM" 
         }, 
         { 
         "desc": "My Desc2", 
         "title": "My Title2", 
         "createDateTime": "May 7, 2013 8:08:13 AM", 
         "updateDateTime": "May 7, 2013 8:08:13 AM" 
         } 
        ], 
        "Feb 1, 2013": [ 
         { 
         "desc": "My Desc3", 
         "title": "My Title3", 
         "createDateTime": "May 8, 2013 8:08:13 AM", 
         "updateDateTime": "May 7, 2013 8:08:13 AM" 
         }, 
         { 
         "desc": "My Desc3", 
         "title": "My Title3", 
         "createDateTime": "May 8, 2013 8:08:13 AM", 
         "updateDateTime": "May 8, 2013 8:08:13 AM" 
         } 
        ] 
        } 
    } 
    

당신은 JSON의 키를 쿼리 할 수 ​​없습니다,

+0

특정 문서 또는 모든 문서에서 특정 날짜를 쿼리하고 있습니까? –

+0

두 가지 요구 사항이 있습니다 : 1) 모든 날짜에 대한 모든 문서 검색 2) 특정 날짜에 대한 모든 문서 검색. –

답변

0

일반적 주셔서 감사합니다,하지만 당신은이 트릭 사용할 수 있습니다

db.things.find({ key : { $exists : true } }); 

이 쿼리가 발견하는 것입니다 특정 키를 가진 문서

그러나 나는 이것이 b 귀하의 prolem을 해결하기위한 est 방법. 첫째, 문서의 이벤트 객체가 미래에 예측할 수 없을 정도로 커질 것으로 보입니다. 스키마를 디자인 할 때 피할 수있는 것이 있습니다. 문서가 커질수록 mongodb가 디스크 공간을 저장 공간으로 이동시켜야하므로 성능 문제가 발생할 수 있습니다.

이벤트 개체를 별도의 컬렉션에 저장하는 것이 좋습니다. '소유자'및 '날짜'필드는 쿼리 대상입니다.

{ 
    "owner":"[email protected]", 
    "date":"Jan 1, 2013", 
    "events":[ 
    { 
     "desc": "My Desc", 
     "title": "My Title", 
     "createDateTime": "May 7, 2013 8:08:13 AM", 
     "updateDateTime": "May 7, 2013 8:08:13 AM" 
    } 
    ] 
} 
+0

find $ exists : 사실 귀하의 의견에서 언급 한 바와 같이 사실, 나는 내 질문에있는 문서 구조에 대한 모든 날짜에 대한 모든 이벤트를 받고있었습니다. 하지만 그와 관계없이 나는 스키마에 대한 귀하의 제안을 정말 좋아합니다. 단순화되고 의미가 있습니다. 정말 고맙습니다. –

관련 문제