在猫鼬/mongo中管理大型ObjectID数组的最佳方法是什么



在本例中:

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

最新更新