最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在MongooseMongoDB中汇总两个集合?

IT培训 admin 5浏览 0评论

如何在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"
});
发布评论

评论列表 (0)

  1. 暂无评论