2016-11-20 6 views
0

를 사용하여 컬렉션의 배열 내에서 데이터를 쿼리하는 방법 :내가 이런 몽구스 스키마가 몽구스

var LogsSchema = new Schema({ 
    date: Date, 
    longitude: String, 
    latitude: String, 
    speed: Number 
}); 

var DeviceSchema = new Schema({ 

name: String, 
model: String, 
phone: { 
    type: Number, 
    required: true, 
    unique: true 
}, 
push: Number, 
logs: [LogsSchema], 
}) 

나는 일종의 제한하고 로그를 배열 데이터를 건너 뛸 수있는 방법을 내 데이터베이스에 로그의 거대한 배열이를 ?? 현재 배열의 마지막 10 요소 만 사용하고 있지만 적용 조건을 선택하고 싶습니다. $ elemMatch를 사용하면 전체 컬렉션에서 보여주는 내 문제는 해결되지 않지만 개별 문서에서 필요합니다. 원하는 것은 기간별 로그를 찾는 것입니다. 모든 제안 사항을 높이 평가합니다.

+0

를 사용하는 경우 $ 필터를 사용할 수 있습니다 당신은 예를 들어, 당신이 시도 쿼리를 보여줄 수 예상되는 출력이 일부 샘플 문서 무엇인지? – chridam

답변

1

사용 통합 프레임 워크. $를 로그 배열을 풀고 당신이 $ 일종의 $ 일치 원하는 조건을 적용, skip.or 당신이 $ 프로젝트 단계에서 $ 필터를 확인하실 수 있습니다, 당신의 예상 출력을 게시하시기 바랍니다 나는 내 손을 시도합니다

db.collection.aggregate([{"$unwind" : "$logs"}, 
{$match : {"$and" : [{"logs.date" :{$gte : fromDate} }, 
{"logs.date" :{"$lte" : toDate}}]}}, 
{"$group" : "_id" : "_id", 
"logs" : {"$push" : "$logs"}, 
"names" :{"$first" : "$name"} 
}]) 

또는 MongoDB를 3.2

{ 
    $filter: { 
    input: logs, 
    as: "num", 
    cond: { $and: [ 
     { $gte: [ "$$num.date", fromDate ] }, 
     { $lte: [ "$$num.date", toDate ] } 
     ] } 
    } 
} 
+0

$ gte : "a_date", $ lte : "a_date"에서 로그를 가져 오려고합니다. – jsgeek

+0

업데이트 된 답변 확인 –