MongoDB를 사용하고 있으며 그룹 내의 레코드를 정렬 및 건너 뛰기를 원합니다.Mongo DB - 그룹 내 정렬 및 생략
{
"_id" : ObjectId("51cd7274267d959cb9f95cea"),
"creation_time" : 100,
"delivered" : true,
"id" : 1,
"user_id" : 10
}
지금 내가 원하는 사용자 당 모든 문서의 _id
(user_id
) 아니 : 아래
_id
개의 문서를 원합니다. 따라서 사용자가 6 개의 문서를 가지고있는 경우 마지막 두 개의 문서를
_id
(creation_time으로 정렬)하여 두 개의 이전 문서를 다른 db에 보관할 수 있습니다.
나는 다음과 같은 쿼리를 사용하고 있습니다 :
db.newsdb.aggregate([
{
$match: {
delivered: true
}
},
{
$group: {
_id: {
user_id: "$user_id",
creation_time: "$creation_time"
}
}
}
])
하는 것은 이제 문제는 각 사용자와 모든 사용자의 문서에 문서에 $sort
및 $skip
작업을 수행 할 것입니다. 그래서 저는 다음과 같은 것을 원합니다 :
{
$group: {
_id: {
user_id: "$user_id",
creation_time: "$creation_time"
}
},
$sort: {
user_id:1,
creation_time:1
},
$skip: 4
}
그러나 mongo db는 지원하지 않습니다. 다음 오류가 발생합니다 :
Error: Printing Stack Trace
at printStackTrace (src/mongo/shell/utils.js:37:7)
at DBCollection.aggregate (src/mongo/shell/collection.js:897:1)
at (shell):1:11
Mon Jul 1 14:47:55.762 JavaScript execution failed: aggregate failed: {
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
"code" : 16435,
"ok" : 0
} at src/mongo/shell/collection.js:L898
왜'$ ceation_time'을'group'에서 사용합니까? 많은 문서가 동일한 user_id를 갖지만 생성 시간이 다를 수 있습니까? – Schaliasos
@Schaliasos'$ creation_time'을 사용하지 않으면 사용자의 모든 문서를 한 행에 그룹화합니다. 그러나 나는 사용자를 위해 모든 문서를 원하고 그 문서에서 작업 (정렬 및 건너 뛰기)을 더 할 수 있습니다. 이제 문제는 최종 결과가 동일 할 때이 그룹의 중요성이 무엇인가하는 것입니다. 그래서 그 질문에 대한 답은 모든 사용자의 모든 문서가 아닌 모든 문서에 대해'sort'와'skip'을 수행하기를 원합니다.나는 그것들을 먼저'user_id'에 의해 그룹화하여 더 많은 작업을 할 수 있다고 생각했습니다. 그보다 더 좋은 아이디어가 있다면 제안 할 수 있습니다. –
그러면 아마도'group' 문이 필요 없을 것입니다. – Schaliasos