我创建了两个模型,即用户,文章。他们的数据结构如下;
const userSchema = Schema({
name: String,
email: String,
password: String
});
const User = mongoose.model(‘user’, userSchema);
module.exports = User;
——
const articleSchema = Schema({
liked: Array, // liked contains users’ _id who like this article
content: String
})
const Article = mongoose.model(‘article’, articleSchema);
module.exports = Article
——
字符串
我想得到的页面大小为10和每篇文章得到填充一些用户的信息谁喜欢这篇文章的所有文章。
例如,让我们想象用户表和文章表的数据如下:
users = [
{
_id: 1,
name: ‘a’,
email: ‘a.com’,
password: ‘a’
},
{
_id: 2,
name: ‘b’,
email: ‘b.com’,
password: ‘b’
}
]
articles = [
{
_id: 1,
liked: [1,2],
content: “a&b”
},
{
_id: 2,
liked: [1],
content: “a”
}
]
型
预期结果是:
articles = [
{
_id: 1,
liked: [
{
_id: 1,
name: ‘a’,
email: ‘a.com’,
password: ‘a’
},
{
_id: 2,
name: ‘b’,
email: ‘b.com’,
password: ‘b’
}
],
content: “a&b”
},
{
_id: 2,
liked: [
{
_id: 1,
name: ‘a’,
email: ‘a.com’,
password: ‘a’
}
],
content: “a”
}
]
型
我试着用Model.find(query)
和Model.aggregate(pipeline)
来解决这个问题,但是这两种方法各有利弊,都不能达到好的效果。请给予我一个建议。
1条答案
按热度按时间baubqpgj1#
根据你在Model.aggregate()查询中分享的内容,一个简单的
$lookup
会得到这样的输出:字符串
请参阅HERE以获取工作示例。
但是,如果您要将模式更改为使用引用的文档,则可以在查询检索时使用populate将
Article.liked
数组中的每个_id
替换为相应的User
文档。这就是你如何使用populate:
型
然后做
型
注意:这个
populate()
的例子工作在每个User
文档的每个User._id
字段都是mongooseObjectId
类型的 predicate 上。