首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDb聚合查询三集

MongoDb聚合查询三集
EN

Stack Overflow用户
提问于 2021-04-19 05:12:33
回答 1查看 53关注 0票数 2

我对MongoDB查询和实践mongoDb查询非常陌生。我正在使用这个官方的mongoDb-包。我遵循这个文档 .I有三个数据集合。一个是袋子,一个是卖家,最后一个是衣服。我们的数据架构是当卖方发送带着他/她的信息的布袋时。我们创建了这样的卖方系列:

代码语言:javascript
复制
{   "sellerId": 1234,
    "firstName": "John",
    "lastName": "doe",
    "fullName": "John Doe",
    "email": "john@yahoo.com",
    "bagId": 2224
}

这是包收集

代码语言:javascript
复制
 { 
   "sellerId": 1234
    "bagId": 2224,
    "source" : "fedex"
}

在从准备出售的袋子中挑选布料后,我们创造了布匹收藏。

代码语言:javascript
复制
[
{
    "bagId": 2224,
    "brandName": "Denim",
    "size": "32",
    "clothId": 1244,
    "color": "green",
    "price": 20
},
{
    "bagId": 2224,
    "brandName": "Zara",
    "size": "31",
    "clothId": 1243,
    "color": "red",
    "price": 90
}
]

当布从Shopify卖出去时。我们得到了SKU的数组,这是我们的布匹收藏clothId.

我的目标是,当布被出售时,我们匹配clothId(SKU-ID来自SHOPIFY)查找bagId,从bagId我们将得到卖家的信息。

我的预期结果是

{

代码语言:javascript
复制
    "firstName": "John",
    "lastName": "doe",
    "fullName": "John Doe",
    "email": "john@yahoo.com",
    "bagId": 2224,
    "clothId": 1244 // sold cloth id which I got from Shopify
    "sellerId": 1234
}

我成功地匹配了出售的布id和shopify (SKU-ID),并获得了包的信息,但我无法弄清楚,如何从bagId获得卖家的信息。

--这是我的代码--布信息和袋子的详细信息,但它并没有给我卖家的信息,只是得到了空数组

代码语言:javascript
复制
const sllerInfo = await client
    .db()
    .collection('clothes')
    .aggregate(
      [
        { $match: { clothId: { '$in': convertInto } } }, // convertInto is arrays of sold clothId which I got from Shopify
        {
          $lookup:
          {
            from: "bags",
            localField: "bagId",
            foreignField: "bagId",
            as: "bags"
          }
        },
        {
          $lookup:
          {
            from: "sellers",
            localField: "sellerId",
            foreignField: "sellerId",
            as: "sellers"
          },
        },
        {
          "$project": {
            "bagId": 1.0,
            "bags.source": 1.0,
            "sellers.firstName": 1.0, // dont get anything
            "sellers.lastName": 1.0,  // dont get anything
            "brand": 1.0
          }
        },
      ]
    ).toArray()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 05:38:18

演示- 8HLT1T

您必须使用$unwind,您需要从bags.sellerId获得卖方id

代码语言:javascript
复制
db.clothes.aggregate([
  {
    $match: {
      clothId: {
        "$in": [
          1244,
          1243
        ]
      }
    }
  },
  {
    $lookup: {
      from: "bags",
      localField: "bagId",
      foreignField: "bagId",
      as: "bags"
    }
  },
  {
    $unwind: "$bags" // break into individual documents
  },
  {
    $lookup: {
      from: "sellers",
      localField: "bags.sellerId", // you need to get seller id from bags
      foreignField: "sellerId",
      as: "sellers"
    },
    
  },
  {
    $unwind: "$sellers"  // break into individual documents
  },
  {
    "$project": {
      _id: 0,
      "clothId": 1,
      "sellerId": "$sellers.sellerId",
      "bagId": 1,
      "bags.source": 1,
      "sellers.firstName": 1,
      "sellers.lastName": 1,
      "brand": 1
    }
  }
])

您可以跳过展开,以防您知道查找中会有唯一匹配的元素。

演示- https://mongoplayground.net/p/IP0epMpQ6mE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67156270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档