我是mongo的新手,对$lookup、aggregate、populate等选项有点困惑,我想确保我使用的是最好的数据结构。
我目前有两个模式--一个用于保存的URL,另一个用于应该与这些URL相关联的Stats。
URL架构:
const UrlSchema = new mongoose.Schema({
urlId: {
type: String,
required: true,
},
...
统计模式:
const StatSchema = new mongoose.Schema({
urlRef: { //each urlRef corresponds to a `urlId` inside the UrlSchema
type: String,
required: true,
},
...
我试图通过循环并添加stats来返回所有url的结果及其在nodejs中对应的stats,但我可以告诉这不是合适的方法:
//get the urls
const urls = await Url.find({ userId: userId })
//add the stats to each url
for (const url of urls) {
const urlStats = await Stat.find({ urlRef: url.urlId });
url.stats = urlStats || [];
}
//send the urls with their stats back to the client
res.json(urls);
正确的方法是什么呢?每个URL的统计信息的数量可能会变得非常大,所以我不想直接将它们作为一个数组存储在每个URL中。
1条答案
按热度按时间mpbci0fu1#
您可以将聚合框架与
$lookup
stage结合使用,根据匹配的ID连接两个集合。下面是查询:
这里有一个链接到MongoDB playground,你可以在这里看到你的查询工作:https://mongoplayground.net/p/WWQGgqbxLFH