我有这样的数据
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},...n{}]
}我在这里尝试得到的是在每次调用中恰好有10条记录,当我有这样的数据时(assign_id恰好有1条记录)
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{}]
}问题陈述
我想在每个呼叫中恰好有10个记录,其中包括assign_id计数
例如,假设我有这样的东西
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},{},{},{},{},{},{},{},{}]
}
{
_id:ObjectId("")
c_id:ObjectId("")
assign_id:[{},{},{},{},{},{},{}]
}现在,如果我查询,我只想要第一条记录,因为它正好有10条记录(assign_id:有10个对象)。
当前查询
db.find(condition)
.limit(parseInt(count))
.skip(parseInt(skip))我也尝试使用下面的代码
db.find(condition,
{assign_id:{$slice:[parseInt(skip),parseInt(count)]}})但是不起作用,请帮助并原谅我冗长的解释。
发布于 2020-09-03 16:04:57
你可以用aggregate()方法来实现,
1(升序),-1(降序),
$unwind array$sort set $skip assign_id $limit$group by _id,$skip_id by assign_id _id,您可以根据需要设置字段<>F223
db.collection.aggregate([
{ $unwind: "$assign_id" },
{ $sort: { _id: 1 } },
{ $skip: 0 },
{ $limit: 10 },
{
$group: {
_id: "$_id",
c_id: { $first: "$c_id" },
assign_id: { $push: "$assign_id" }
}
},
{ $sort: { _id: 1 } }
])https://stackoverflow.com/questions/63718758
复制相似问题