【问题标题】:get inner child array content as query result in mongodb在 mongodb 中获取内部子数组内容作为查询结果
【发布时间】:2019-07-30 03:43:34
【问题描述】:

我有一个期刊收藏,其中包含期刊详细信息、卷数、期数和文章。我需要从下面的集合中获取问题名称和其中的文章数。条件将是:

_id = ObjectId("5c7faf8384bbfc127f171222")

jnl_volumes.name = 1


这是我的文档:

{
    "_id":ObjectId("5c7faf8384bbfc127f171222"),
    "jnl_code":"QWER",
    "jnl_title":"Title",
    "jnl_short_title":"short",
    "jnl_accronym":"accronym",
    "jnl_issn":"issn",
    "jnl_eissn":"eissn",
    "jnl_license_type":{
        "name":"Open access",
        "value":"o"
    },
    "jnl_category":{
        "name":"Science",
        "value":"s"
    },
    "jnl_volumes":[
        {
            "name":1,
            "created_date":"2019-03-06",
            "status":"0",
            "issue_flag":"0",
            "jnl_issues":[
                {
                    "issue_name":"2",
                    "created_date":"2019-03-07",
                    "jnl_articles":[
                        "ART 1",
                        "ART 2"
                    ]
                },
                {
                    "issue_name":"3",
                    "created_date":"2019-03-07",
                    "jnl_articles":[
                        "A 1"
                    ]
                },
                {
                    "issue_name":"4",
                    "created_date":"2019-03-07",
                    "jnl_articles":[
                        "AR 1"
                    ]
                }
            ]
        },
        {
            "name":2,
            "created_date":"2019-03-06",
            "status":"0",
            "issue_flag":"0",
            "jnl_issues":[
                {
                    "issue_name":"1",
                    "created_date":"2019-03-07",
                    "jnl_articles":[
                        "Article 1",
                        "Article 2",
                        "Article 3",
                        "Article 4",
                        "Article 5"
                    ]
                }
            ]
        }
    ],
    "jnl_created_by":"1",
    "jnl_status":"a",
    "jnl_proxy_id":"0",
    "jnl_operation":"i",
    "jnl_updated_date":ISODate("2019-03-07T11:05:21.000Z"),
    "jnl_created_date":ISODate("2019-03-07T11:05:21.000Z")
}

我希望结果包含 jnl_issues.name 和其中 jnl_articles 的计数....

【问题讨论】:

  • 你要mongodb命令还是mo​​ngoose命令?
  • @Black-Hole Mongodb 请...

标签: mongodb mongoose


【解决方案1】:

以下是使用mongodb聚合的结果,可能还有优化的空间,但我还是不知道怎么优化。

db.test.aggregate([
  { $match: { '_id': ObjectId("5c7faf8384bbfc127f171222") } },
  { $project: { 'jnl_volumes': 1 } },
  { $unwind: '$jnl_volumes' },
  { $match: { 'jnl_volumes.name': 1 } },
  { $group: { '_id': null, 'info': { $push: '$jnl_volumes.jnl_issues' } } },
  { $unwind: '$info' },
  { $unwind: '$info' },
  { $project: { 'name': '$info.issue_name', 'count': { $sum: { $size: '$info.jnl_articles' } } } }
])

这是我的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2020-11-13
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多