如何在Mongoose / MongoDB中汇总两个集合?
在我的学习服务器上。我有两个与用户及其种族有关的收藏。竞赛具有userId属性,以便知道是什么用户参加了这场竞赛。我需要使所有用户和所有种族成为合并对象。我已经收集了用户:
[
{
"_id": "5d938ec8b17e522018e327db",
"name": "max",
"surname": "buinevich",
"username": "axe",
"__v": 0
}
]
和种族集合
[
{
"_id": "5d93ac4c7076dc212ce187d6",
"userId": "5d938ec8b17e522018e327db",
"stageId": "5d939e16d4e51d2eac81827d",
"title": "test race",
"time": 33,
"description": "test desc",
"__v": 0
}
]
所以我需要参加所有具有适当比赛的用户才能获得类似结果
[
{
"_id": "5d938ec8b17e522018e327db",
"name": "max",
"surname": "buinevich",
"username": "axe",
"races": [{
"_id": "5d93ac4c7076dc212ce187d6",
"userId": "5d938ec8b17e522018e327db",
"stageId": "5d939e16d4e51d2eac81827d",
"title": "test race",
"time": 33,
"description": "test desc",
"__v": 0
}]
"__v": 0
}
]
我不想在集合模式中使用引用。也许像猫鼬聚集之类的东西。
回答如下:如果不使用refs
中的mongoose schemas
(尽管推荐),因为populate
在生成分层文档方面非常方便。
选择使用本机聚合管道 $lookup
,该原始本质上对联接的集合执行(类似于LEFT JOIN是SQL),以在数组字段中填充文档。
聚合查询:
$lookup
猫鼬模型聚合查询看起来像:
db.usersCollection.aggregate([
{
$lookup: {
from: "racesCollection",
localField: "_id",
foreignField: "userId",
as: "races"
}
}
]).pretty();
输出:
UserModel.aggregate.lookup({
from: "Races", //or Races.collection.name
localField: "_id",
foreignField: "userId",
as: "races"
});
如何在Mongoose / MongoDB中汇总两个集合?
在我的学习服务器上。我有两个与用户及其种族有关的收藏。竞赛具有userId属性,以便知道是什么用户参加了这场竞赛。我需要使所有用户和所有种族成为合并对象。我已经收集了用户:
[
{
"_id": "5d938ec8b17e522018e327db",
"name": "max",
"surname": "buinevich",
"username": "axe",
"__v": 0
}
]
和种族集合
[
{
"_id": "5d93ac4c7076dc212ce187d6",
"userId": "5d938ec8b17e522018e327db",
"stageId": "5d939e16d4e51d2eac81827d",
"title": "test race",
"time": 33,
"description": "test desc",
"__v": 0
}
]
所以我需要参加所有具有适当比赛的用户才能获得类似结果
[
{
"_id": "5d938ec8b17e522018e327db",
"name": "max",
"surname": "buinevich",
"username": "axe",
"races": [{
"_id": "5d93ac4c7076dc212ce187d6",
"userId": "5d938ec8b17e522018e327db",
"stageId": "5d939e16d4e51d2eac81827d",
"title": "test race",
"time": 33,
"description": "test desc",
"__v": 0
}]
"__v": 0
}
]
我不想在集合模式中使用引用。也许像猫鼬聚集之类的东西。
回答如下:如果不使用refs
中的mongoose schemas
(尽管推荐),因为populate
在生成分层文档方面非常方便。
选择使用本机聚合管道 $lookup
,该原始本质上对联接的集合执行(类似于LEFT JOIN是SQL),以在数组字段中填充文档。
聚合查询:
$lookup
猫鼬模型聚合查询看起来像:
db.usersCollection.aggregate([
{
$lookup: {
from: "racesCollection",
localField: "_id",
foreignField: "userId",
as: "races"
}
}
]).pretty();
输出:
UserModel.aggregate.lookup({
from: "Races", //or Races.collection.name
localField: "_id",
foreignField: "userId",
as: "races"
});