데이터베이스에 삽입 된 데이터의 마지막 시퀀스에서 첫 번째 항목을 가져와야합니다. 그것은 하나의 쿼리에서 할 수 있다면 좋을 것입니다.데이터가있는 마지막 시퀀스에서 첫 번째 항목 가져 오기
의 내가 같은 데이터가 있다고 가정 해 봅시다 :
{_id:......,ts:Date("2017-10-24T00:00:00.000Z"), id: 1, ok: false}
{_id:......,ts:Date("2017-10-23T00:00:00.000Z"), id: 1, ok: false}
{_id:......,ts:Date("2017-10-22T00:00:00.000Z"), id: 1, ok: true}
{_id:......,ts:Date("2017-10-21T00:00:00.000Z"), id: 1, ok: true}
{_id:......,ts:Date("2017-10-20T00:00:00.000Z"), id: 1, ok: false}
{_id:......,ts:Date("2017-10-21T00:00:00.000Z"), id: 2, ok: false}
{_id:......,ts:Date("2017-10-20T00:00:00.000Z"), id: 2, ok: true}
및 확인이 거짓 일 때 현장 확인은 마지막 순서로 거짓 때마다 ID의 첫 번째 항목을 얻을 필요가있다.
{_id:......,ts:Date("2017-10-23T00:00:00.000Z"), id: 1, ok: false}
하지만 이드마다 필요합니다. 내가 확장 성을 수행하는 것은 불가능한 것처럼 보이므로 데이터베이스에 대해 수천 개의 쿼리가 필요하지는 않습니다. 하나의 ID를 위해 그것을 만드는 방법을 알고 있지만 모든 ID에 대한 쿼리를 보내야 할 경우 데이터베이스가 압도적입니다.
이 내 현재 쿼리입니다 :
이{
$sort : {ts : -1}
},
{
$match : {"ok" : true }
},
{
$group : {
_id : {id : "$id"},
last : {$last : "$$CURRENT"}
}
}
이 확인 사실과 모든 ID에 대한 마지막 데이터를 나를 수 있습니다.
하지만 그 후에 데이터가 필요합니다. ok false에 대해이를 수행하는 간단한 확장 가능한 방법이 있습니까 ??
나는 집계에 foreach는 기능을 사용하려하지만 난 오류TypeError: db.getCollection(...).aggregate(...).foreach is not a function
그래서 그때 모르는 얻을한다면 ... 그렇게도 가능하다?