在mongoDB中加入两个集合并在节点js中提取数据

时间:2018-03-07 19:18:53

标签: javascript node.js mongodb mean-stack

我正在为我的项目使用MongoDB 3.6。 我有2个收藏品#34;用户"和"关注"。我想提取用户关注者和关注者的详细信息(如Instagram应用程序)。

用户集合

{
    "id" : "1",
    "name" : "abc",
    "age" : "26"

},
{
    "id" : "2",
    "name" : "xyz",
    "age" : "22"

},
{
    "id" : "3",
    "name" : "qwe",
    "age" : "23"

}

关注收藏

{
    "id" : "2",
    "follow id" : "1"

},
{
    "id" : "3",
    "follow id" : "1"

},
{
    "id" : "1",
    "follow id" : "2"

},
{
    "id" : "2",
    "follow id" : "3"

},
{
    "id" : "1",
    "follow id" : "3"

}

现在我想要下面的id 2列表所以id 2跟随id 1和id 3 所以,输出应该是这样的

{
    "id" : "1",
    "name" : "abc",
    "age" : "26"

},
{
    "id" : "3",
    "name" : "qwe",
    "age" : "23"

}

为此,我使用$ lookup聚合。但这并没有给出我想要的所需输出。 这是我的代码 -

Follow.aggregate([
    { 
        $lookup:{
            from:"users",
            localField:"id",
            foreignField:"id",
            as:"fromItems"
        }
    },
    {
        $replaceRoot:{newRoot: {$mergeObjects: [ { $arrayElemAt: ["$fromItems", 0 ] }, "$$ROOT" ] } }
    },
    { $project : 
        { 
            fromItems : 0 
        } 
    }
], callback)

如需更多理解,请参阅ProcessHandle.Info::totalCpuDuration

1 个答案:

答案 0 :(得分:0)

要获取以下ID NumberFormatter列表,您可以使用以下查询:

2

因此,重点在于Follow.aggregate([ { $match: { "id": "2" } }, { $lookup:{ from:"users", localField:"follow id", foreignField:"id", as:"fromItems" } }, { $replaceRoot:{newRoot: {$mergeObjects: [ { $arrayElemAt: ["$fromItems", 0 ] }, "$$ROOT" ] } } }, { $project : { id : "$follow id", name: 1, age: 1 } } ]) id之间存在关联,follow id阶段之后$lookup成为新follow id,因为它是父母 - {孩子的关系。

编辑: 3.4解决方案

id