javascript - MongoDB - 即时从 ID 获取数据

标签 javascript database mongodb aggregation-framework backend

我有这个示例数据

帖子

[{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo'
},
{
 _id: ObjectId("507f191e810c19729de860ea"),
 name: 'Bar'
},
{
 _id: ObjectId("5b8797747ea41163b7eb51b0"),
 name: 'FooBar'
}]

类别

[{
 _id: ObjectId("5b87979c10397d6c12d69513"),
 name: 'Funny',
 type: 1
},
{
 _id: ObjectId("5b8797ab24098febfb05abdd"),
 name: 'Sad',
 type: 1
},
{
 _id: ObjectId("5b8797b24e31ebf7603f3c3e"),
 name: 'Romantic',
 type: 2
}]

最后一个是关系

[{
 _id: ObjectId("5b879818763ecd6f1c54d306"),
 postID: ObjectId("507f1f77bcf86cd799439011"),
 categoryID: ObjectId("5b87979c10397d6c12d69513")
},
{
 _id: ObjectId("5b8798eb040890fb2a88c0af"),
 postID: ObjectId("507f1f77bcf86cd799439011"),
 categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
}]

当我在 Mongo 中使用 $lookup 时,我得到这样的结果:

{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo', 
 categories: [{
     _id: ObjectId("5b879818763ecd6f1c54d306"),
     postID: ObjectId("507f1f77bcf86cd799439011"),
     categoryID: ObjectId("5b87979c10397d6c12d69513")
  },
  {
     _id: ObjectId("5b8798eb040890fb2a88c0af"),
     postID: ObjectId("507f1f77bcf86cd799439011"),
     categoryID: ObjectId("5b8797b24e31ebf7603f3c3e"),
  }]
}

在这种情况下,这是我在关系中的所有示例数据,无论如何如何只获取类别数据而不是关系数据,我想得到这样的东西:

{
 _id: ObjectId("507f1f77bcf86cd799439011"),
 name: 'Foo', 
 categories: [{
     _id: ObjectId("5b87979c10397d6c12d69513"),
     name: 'Funny',
     type: 1
   },
   {
     _id: ObjectId("5b8797b24e31ebf7603f3c3e"),
     name: 'Romantic',
     type: 2
   }]
}

最佳答案

您可以尝试从 mongodb 3.6

进行以下聚合
db.collection.aggregate([
  { "$match": { "_id": ObjectId("507f1f77bcf86cd799439011") } },
  { "$lookup": {
    "from": "Relationship",
    "let": { "categoryID": "$_id" },
    "pipeline": [
       { "$match": { "$expr": { "$eq": [ "$categoryID", "$$categoryID" ] } } },
       { "$lookup": {
         "from": "Category",
         "let": { "categoryID": "$categoryID" },
         "pipeline": [
           { "$match": { "$expr": { "$eq": [ "$_id", "$$categoryID" ] } } }
         ],
         "as": "category"
      }},
      { "$unwind": "$category" },
      { "$replaceRoot": { "newRoot": "$category" }}
    ],
    "as": "categories"
  }}
])

关于javascript - MongoDB - 即时从 ID 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52091410/

相关文章:

c# - 连接字符串中的 Mongodb autoConnectRetry 选项不适用于 C# 驱动程序

mongodb - 为什么 mongodb 拒绝 ssl 连接?

javascript - 从 phonegap 上的服务器检索数据

javascript - 在 Windows 中预编译 Handlebars.js 模板

javascript - 将 javascript 注入(inject) zombie.js

javascript - 如何在 Ember 中导入全局变量?

ruby-on-rails - Rails Migration 将字符串转换为整数?

sql-server - SQL加入带有参数的递归CTE

mongodb - 如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

javascript - 有没有办法从 Chart.js 的条形图中删除多余的空间和水平线?