首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在单个集合上使用mongodb $lookup

在单个集合上使用mongodb $lookup
EN

Stack Overflow用户
提问于 2016-07-01 15:24:38
回答 2查看 584关注 0票数 1

我有一个集合,里面有这样的文档

代码语言:javascript
运行
复制
{
    "_id" : ObjectId("5773ac6a486f811694711875"),
    "bsk" : {
        "bskItems" : [ 
            {
                "id" : 4,
                "bskItemLineType" : "SaleItem",
                "product" : {
                    "description" : "reblochon"
                }
            }, 
            {
                "id" : 5,
                "bskItemLineType" : "SaleItem",
                "product" : {
                    "description" : "Pinot Noir"
                }
            }, 
            {
                "id" : 13,
                "bskItemLineType" : "PromotionItem",
                "promotionApplied" : {
                    "bskIds" : [ 
                        4, 
                        5
                    ]
                }
            }, 
            {
                "id" : 8,
                "bskItemLineType" : "SaleItem",
                "product" : {
                    "description" : "Food"
                }
            }, 
            {
                "id" : 10,
                "bskItemLineType" : "SubTotalItem"
            }, 
            {
                "id" : 12,
                "bskItemLineType" : "TenderItem"
            }, 
            {
                "id" : 14,
                "bskItemLineType" : "ChangeDue"
            }
        ]
    }
}

我想要一个输出,在那里我可以看到"promotionsApplied“和它们所应用的项的描述。对于上面的文档,"promotionsApplied“是"bsk.BskItems.id”4和5,所以我希望输出是:

代码语言:javascript
运行
复制
{
    "_id": xxxxx,
    "promotionAppliedto : "reblochon"
},
{

    "_id": xxxxx,
    "promotionAppliedto : "Pinot Noir"
}      

查询如下:

代码语言:javascript
运行
复制
 db.getCollection('DSTest').aggregate([
{$project:{"bsk.bskItems.product.description":1,"bsk.bskItems.id":1}},
{$unwind: "$bsk.bskItems"},

    ])

为我获取描述

代码语言:javascript
运行
复制
db.getCollection('DSTest').aggregate([
{$project:{"bsk.bskItems.promotionApplied.bskIds":1}},

{$unwind: "$bsk.bskItems"},
{$unwind:"$bsk.bskItems.promotionApplied.bskIds"},

    ])

给我申请的促销。我希望能够使用$lookup加入基于_idbsk.bskItems.promotionApplied.bskIds以及_idbsk.bskItems.id的两者,但我不知道如何做到这一点。

EN

Stack Overflow用户

发布于 2016-07-03 06:14:43

使用文档类型数据库-最好存储升级元数据,而不是只存储id。请参阅附件中的示例

代码语言:javascript
运行
复制
"promotionApplied" : [{
        bskId : 4,
        name : "name",
        otherData : "otherData"
    }, {
        bskId : 5,
        name : "name5",
        otherData : "otherData5"
    }
]
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38139452

复制
相关文章

相似问题

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