如何在mongo shell中获得带有子项的父项

时间:2020-02-27 12:16:00

标签: mongodb shell

我是MongoDB的新手。 我的收藏是authorsbooks。它的多对多关联

我的作者收藏

[{
    "id": "11",
    "name": "Sam",
    "age": 40
},
{
    "id": "12",
    "name": "Jack",
    "age": 20
},
{
   "id": "22",
    "name": "Smith",
    "age": 35
}]

我的书集

[{
    "id": "123",
    "title": "Hello World",
    "price": 200,
    "authors":["Sam","Jack"]
},
{
    "id": "34",
    "title": "Good Day",
    "price": 100,
    "authors":["Smith"]
}]

这是我的邮递员结果。

[{
    "authors": [
        {
            "id": "11",
            "name": "Sam",
            "age": 40,
        },
        {
            "id": "12",
            "name": "Jack",
            "age": 20,
        }
    ],

    "id": "123",
    "title": "Hello World",
    "price": 200,        
}]

我将查询放在mongo shell中以找到books,但结果仅显示书的详细信息而未显示authors(子条目)。

如何在mongo shell命令中获取包含作者条目的书(例如邮递员结果)。

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试以下代码:

    <db>.books.aggregate([
    {
        '$project': {
            'id': 1, 
            'title': 1, 
            'price': 1, 
            'authors': 1, 
            'numberOfAuthors': {
                '$cond': {
                    'if': {
                        '$isArray': '$authors'
                    }, 
                    'then': {
                        '$size': '$authors'
                    }, 
                    'else': 0
                }
            }
        }
    }, {
        '$match': {
            'numberOfAuthors': {
                '$eq': 2
            }
        }
    }, {
        '$lookup': {
            'from': 'authors', 
            'localField': 'authors', 
            'foreignField': 'name', 
            'as': 'authors'
        }
    }
])

使用投影,然后在查找之前使用匹配