【问题标题】:How can i combine multiple collection into one collection using with $lookup mongodb or nodejs mongodb?如何使用 $lookup mongodb 或 nodejs mongodb 将多个集合合并为一个集合?
【发布时间】:2017-04-21 12:04:16
【问题描述】:

我有以下包含文档计数的集合 除法 - 30,

类别 - 248

产品组 - 1402

产品 - 60000

例如我给出了下面的数据 分工

{

    "divisionid": "1",
    "divisioncode": "0",
    "divisionname": "ELECTRONICS/HOME APPLIANCE",
    "divisionpoint": "2"
},
{

    "divisionid": "2",
    "divisioncode": "1",
    "divisionname": "FOODS",
    "divisionpoint": "8"
}

分类收集数据的

{

    "categoryid": "1",
    "divisionid": "1",
    "categorycode": "34",
    "categoryname": "AUDIO SYSTEM",
    "categorypoint": "Null"
},
{

    "categoryid": "2",
    "divisionid": "1",
    "categorycode": "348",
    "categoryname": "DVD/VCD",
    "categorypoint": "8"
}

productgroup 集合数据的

{

    "productgroupid": "1",
    "divisionid": "1",
    "categoryid": "1",
    "productgroupname": "ADAPTOR",
    "productgroupcode": "6765",
    "productgrouppoint": "7"
},
{

    "productgroupid": "2",
    "divisionid": "1",
    "categoryid": "2",
    "productgroupname": "WALKMAN",
    "productgroupcode": "7659",
    "productgrouppoint": "Null"
}

产品集合数据的

{

    "productid": "1",
    "divisionid": "1",
    "categoryid": "1",
    "productgroupid":"1",
    "productname":"UNIVERSAL AC DC ADAPTER-PCS",
    "productcode": "1000054",
    "productpoint": "1"
},
{

    "productid": "2",
    "divisionid": "1",
    "categoryid": "2",
    "productgroupid":"2",
    "productname":"WALKMAN WM#M470-PCS",
    "productcode": "1000089",
    "productpoint": "2"
}

我有 4 个类似的收藏

师,

类别,

产品组,

产品

这些都是我的数据,存储在我的部门集合数据的集合中

{

"divisionid": "1",
"divisioncode": "0",
"divisionname": "ELECTRONICS/HOME APPLIANCE",
"divisionpoint": "2"

}, {

"divisionid": "2",
"divisioncode": "1",
"divisionname": "FOODS",
"divisionpoint": "8"

} 类别收集数据的

{

"categoryid": "1",
"divisionid": "1",
"categorycode": "34",
"categoryname": "AUDIO SYSTEM",
"categorypoint": "Null"

}, {

"categoryid": "2",
"divisionid": "1",
"categorycode": "348",
"categoryname": "DVD/VCD",
"categorypoint": "8"

} productgroup 收集数据的

{

"productgroupid": "1",
"divisionid": "1",
"categoryid": "1",
"productgroupname": "ADAPTOR",
"productgroupcode": "6765",
"productgrouppoint": "7"

}, {

"productgroupid": "2",
"divisionid": "1",
"categoryid": "2",
"productgroupname": "WALKMAN",
"productgroupcode": "7659",
"productgrouppoint": "Null"

} 产品收集数据的

{

"productid": "1",
"divisionid": "1",
"categoryid": "1",
"productgroupid":"1",
"productname":"UNIVERSAL AC DC ADAPTER-PCS",
"productcode": "1000054",
"productpoint": "1"

}, {

"productid": "2",
"divisionid": "1",
"categoryid": "2",
"productgroupid":"2",
"productname":"WALKMAN WM#M470-PCS",
"productcode": "1000089",
"productpoint": "2"

} 我想将这 4 个集合合并为一个集合。 我应该得到这样的总结 产品总结

{


        "productpoint": "1",
        "productname": "UNIVERSAL AC DC ADAPTER-PCS",
        "productcode": "10000054",
        "productid"  :"1"

    "group": {
        "point": "7",
        "name": "ADAPTOR",
        "id"  :"1"
    },
    "category": {
        "point": "0",
        "name": "AUDIO SYSTEM",
        "id"  :"1"
    },
    "division": {
        "point": "2",
        "name": "ELECTRONICS/HOME APPLIANCE",
        "id"  :"1"
    }
},
{


        "productpoint": "2",
        "productname": "WALKMAN WM#M470-PCS",
        "productcode": "1000089",
        "productid"  :"2"

    "group": {
        "point": "7",
        "name": "WALKMAN",
        "id"  :"Null"
    },
    "category": {
        "point": "8",
        "name": "DVD/VCD",
        "id"  :"2"
    },
    "division": {
        "point": "2",
        "name": "ELECTRONICS/HOME APPLIANCE",
        "id"  :"1"
    }
}

我运行这段代码

db.products.aggregate([ 
    {$lookup:{from:"productgroups", localField:"productgroupid", foreignField:"productgroupid", as:"group"}},
    {$lookup:{from:"category", localField:"categoryid", foreignField:"categoryid", as:"category"}},
    {$lookup:{from:"divisions", localField:"divisionid", foreignField:"divisionid", as:"division"}},
    {$project: {productpoint:1,productname:1,productcode:1,productid:1,group: { $arrayElemAt: [ "$group", 0 ]},
                category: { $arrayElemAt: [ "$category", 0 ]}, division: { $arrayElemAt: [ "$division", 0 ]} }} 
  ]);

它可以工作,但当时我有 60 k 产品它不工作并且出现像这样的错误

数据会像这样存储在 productpointallocations 中

{

    "productpoint": "2",
        "productname": "WALKMAN WM#M470-PCS",
        "productcode": "1000089",
        "productid"  :"2"
}

有没有其他方法可以做到这一点并为此提供一些其他解决方案

nodejs mongodb中还有其他选项吗?

【问题讨论】:

标签: node.js mongodb express lookup


【解决方案1】:

您应该使用$skip$limit 来避免此错误。为什么会出现这个错误?你必须阅读@Alex 评论链接。

db.products.aggregate([ 
    {$skip:0},{$limit: 1000},
    {$lookup:{from:"productgroups", localField:"productgroupid", foreignField:"productgroupid", as:"group"}},
    {$lookup:{from:"category", localField:"categoryid", foreignField:"categoryid", as:"category"}},
    {$lookup:{from:"divisions", localField:"divisionid", foreignField:"divisionid", as:"division"}},
    {$project: {productpoint:1,productname:1,productcode:1,productid:1,group: { $arrayElemAt: [ "$group", 0 ]},
                category: { $arrayElemAt: [ "$category", 0 ]}, division: { $arrayElemAt: [ "$division", 0 ]} }} 
  ]);

{$skip:0},{$limit: 1000}// 初始,然后下一次应该跳过:1000,限制:1000 等等。您可以从请求中获取它,也可以通过使用循环或在您实现时获取它。

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2017-04-20
    • 2015-07-11
    • 1970-01-01
    • 2016-06-19
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多