我正在使用 MongoDB,我想对组内的记录进行排序和跳过。
下面是一个示例数据:
{
"_id" : ObjectId("51cd7274267d959cb9f95cea"),
"creation_time" : 100,
"delivered" : true,
"id" : 1,
"user_id" : 10
}
现在我想要的是_id
每个用户的所有文档(user_id
),其中没有。用户的文档数大于 4。我还想要_id
跳过这 4 个文档后的文档数。因此,如果用户有 6 个文档,那么我想要_id
最后 2 个文档(按创建时间排序),以便我可以将这 2 个旧文档存档到另一个数据库。
我正在使用以下查询:
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