在本例中:
const PostSchema = new mongoose.Schema({
"content": {
type: String,
required: true
},
"user": {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User"
},
"created": {
type: Date,
default: Date.now()
},
"comments": [{
type: mongoose.Schema.Types.ObjectID,
ref: 'Comment'
}]
})
我希望能够一次获得10条评论,但我认为没有办法做到这一点,除非每次都必须获得所有评论。
您可以使用不相关查找来连接集合并限制为10。下面是一个例子,为了便于理解,我用String
代替_id
。
$lookup
-有两个查找,我在这里使用非相关查找,您可以在加入集合时进行并行聚合。$match
有助于有条件地加入文档。当您使用非相关查找时,必须在$match
中使用$expr
。$limit
有助于限制文件。如果你需要,你可以添加更多的阶段来执行管道内的聚合
下面是脚本
db.PostSchema.aggregate([
{
"$lookup": {
"from": "Comment",
let: {
cId: "$comments"
},
"pipeline": [
{
$match: {
$expr: {
_id: {
in: [
"$$cId"
]
}
}
}
},
{
$limit: 10
}
],
"as": "comments"
}
}
])
Working Mongo playground