如何按数组的第一个元素分组?

问题描述 投票:7回答:2

我处理以下文件:

{
    "foo" : { "objectid" : "39", "stuff" : "65" },
    "yearpublished" : ["1979"],
    "bar" : "1263"
}

yearpublished是一个数组,我想按此数组中的第一个值对集合进行分组,然后计算相关文档的数量。

我已编写此查询:

db.foobar.aggregate([
    { $group : {
        _id : '$yearpublished',
        count: { $sum: 1 }
    }}
])

并获得:

{
    "result" : [ 
        { "_id" : ["1923"], "count" : 1.0000000000000000 }, 
        { "_id" : ["1864"], "count" : 1.0000000000000000 }
    ]
}

但是我正在寻找这种结果(即仅第一个元素):

{
    "result" : [ 
        { "_id" : "1923", "count" : 1.0000000000000000 }, 
        { "_id" : "1864", "count" : 1.0000000000000000 }
    ]
}

我也尝试过_id : { $first: '$yearpublished.0' },_id : { $first: '$yearpublished[0]' },,但没有成功。

如何将数组的第一个元素分组[[年份]?]

[我使用以下文件:{“ foo”:{“ objectid”:“ 39”,“ stuff”:“ 65”},“ yearpublished”:[“ 1979”],“ bar”:“ 1263”} yearpublished是一个数组,我想对我的...进行分组...
mongodb mongodb-query aggregation-framework
2个回答
10
投票
[不幸的是,目前唯一的方法是在处理$first之后从数组中提取$first元素。然后,您当然必须再次单击$unwind

0
投票
[开始$arrayElemAt,聚合运算符db.foobar.aggregate([ { "$group": { "_id": { "$arrayElemAt": [ "$yearpublished", 0 ] }, "count": { "$sum": 1 } }} ]) 可用于访问数组的第一个元素。
© www.soinside.com 2019 - 2024. All rights reserved.