Mongo嵌入式文档字段查询

海姆斯

我有一个包含以下类似文件的现有收藏集

{
    "_id" : UUID("ef2f3778-c74a-4a40-9169-a7798bc6c776"),
    "feedId" : UUID("677d0a5a-0ceb-43d9-954d-bfefddc22ca2"),
    "events" : {
        "1500" : {
            "t" : ISODate("2020-08-20T02:25:00.000Z"),
            "a" : {
                "Manager" : "Joe",
                "Amount" : 20.3
            }
        },
        "1800" : {
            "t" : ISODate("2020-08-20T02:30:00.000Z"),
            "a" : {
                "Manager" : "Joe",
                "Amount" : 21.3
            }
        },
        "2100" : {
            "t" : ISODate("2020-08-20T02:35:00.000Z"),
            "a" : {
                "Manager" : "Joe",
                "Amount" : 22.3
            }
        },
        "2400" : {
            "t" : ISODate("2020-08-20T02:40:00.000Z"),
            "a" : {
                "Manager" : "Joe",
                "Amount" : 23.3
            }
        }
    }
}

我对查询返回按时间顺序排列的所有“金额”字段值(“ t”字段)感兴趣。现在,我认识到“事件”嵌入文档的结构不太可能正确构建。它应该是一个数组。但这恐怕是徒手的,即没有选择来更改文档。如何从集合中具有相同feedId的所有对象中返回类似于[20.3、21.3、22.3、23.3等]的查询?

编辑:我将添加事件对象/文档在每个集合对象上没有统一的名称。即在这里您看到1500、1800、2100等。但是下一个文档可能只有1500和3000。

引用另一个有相同问题但似乎遇到困难的帖子(似乎没有将文档架构更改为数组):

MongoDB查询嵌入式文档字段

海姆斯

@JF的回答使我很接近。这是对我有用的查询:

db.collection.aggregate(
    [
        { $match: { feedId: 2 } },
        { $project: { events: {$objectToArray: "$events"} } },
        {
            "$unwind": "$events"
        },
        {
            "$sort": {
              "events.v.t": 1
            }
        },
        { $group: {  "_id": null, Amounts: { $push: "$events.v.a.Amount" } } },
        {
          "$project": {
            "Amounts": 1,
            "_id": 0
        }
      }
    ]
)

它为我产生了预期的结果。我希望这是正确的。

结果:

/* 1 */
{
    "Amounts" : [ 
        20.3, 
        21.3, 
        22.3, 
        23.3, 
        24.3, 
        25.3, 
        26.3, 
        27.3, 
        28.3, 
        29.3, 
        30.3, 
        31.3, 
        32.3, 
        33.3, 
        34.3, 
        35.3, 
        36.3, 
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章