2014-12-05 4 views
1

내가MongoDB를가 임베디드 문서를 쿼리

{ 
"_id" : "THIS_IS_A_DHP_USER_ID+2014-11-26", 
"_class" : "weight", 
"items" : [ 
    { 
     "dateTime" : ISODate("2014-11-26T08:08:38.716Z"), 
     "value" : 98.5 
    }, 
    { 
     "dateTime" : ISODate("2014-11-26T08:18:38.716Z"), 
     "value" : 95.5 
    }, 
    { 
     "dateTime" : ISODate("2014-11-26T08:28:38.663Z"), 
     "value" : 90.5 
    } 
], 
"source" : "MANUAL", 
"to" : ISODate("2014-11-26T08:08:38.716Z"), 
"from" : ISODate("2014-11-26T08:08:38.716Z"), 
"userId" : "THIS_IS_A_DHP_USER_ID", 
"createdDate" : ISODate("2014-11-26T08:38:38.776Z") 
} 
{ 
"_id" : "THIS_IS_A_DHP_USER_ID+2014-11-25", 
"_class" : "weight", 
"items" : [ 
    { 
     "dateTime" : ISODate("2014-11-25T08:08:38.716Z"), 
     "value" : 198.5 
    }, 
    { 
     "dateTime" : ISODate("2014-11-25T08:18:38.716Z"), 
     "value" : 195.5 
    }, 
    { 
     "dateTime" : ISODate("2014-11-25T08:28:38.716Z"), 
     "value" : 190.5 
    } 
], 
"source" : "MANUAL", 
"to" : ISODate("2014-11-25T08:08:38.716Z"), 
"from" : ISODate("2014-11-25T08:08:38.716Z"), 
"userId" : "THIS_IS_A_DHP_USER_ID", 
"createdDate" : ISODate("2014-11-26T08:38:38.893Z") 
} 

이 문서 구조에 발사 할 쿼리와 같은 구조를 가지고있는 몽고 문서를 가지고는 포함 된 배열을 특정 사용자 ID에 대한 문서를 찾는 풀기위한 것입니다 특정 날짜 범위 사이에있는 객체 가져 오기.

이러한 쿼리에 대해 집계를 만들 수 있습니까? 그렇지 않으면 map-reduce 종류의 쿼리를 사용하여 해결해야합니다.

답변

1

당신은 아래에 집계 할 수 있습니다

  • Initialize 시작 날짜와 종료 날짜 변수를.
  • Match 필요한 userId 문서.
  • Unwind items 배열입니다.
  • $and 연산자는 match에 날짜가있는 항목을 사용하십시오.
  • Group을 합치면, userId에 근거한다.
  • Project 필수 입력란입니다.

코드 :

var startDate = ISODate(); // initialize the correct start date 
var endDate = ISODate(); // initialize the correct end date. 

db.collection.aggregate([ 
{$match:{"userId":"THIS_IS_A_DHP_USER_ID"}}, 
{$unwind:"$items"}, 
{$match:{$and:[{"items.dateTime":{$gt:startDate}}, 
       {"items.dateTime":{$lt:endDate}}]}}, 
{$group:{"_id":"$userId", 
     "items":{$push:"$items"}, 
     "_class":{$first:"$_class"}, 
     "source":{$first:"$source"}, 
     "to":{$first:"$to"}, 
     "from":{$first:"$from"}, 
     "createdDate":{$first:"$createdDate"}}}, 
{$project:{"_id":0, 
     "items":1, 
     "_class":1, 
     "source":1, 
     "to":1, 
     "from":1, 
     "createdDate":1,"userId":"$_id"}} 
]) 
관련 문제