【问题标题】:Distinct by a key and then get results of fields other than the key用key区分,然后得到key以外的字段的结果
【发布时间】:2017-11-06 12:25:12
【问题描述】:

鉴于我在 MongoDB 中有以下内容:

[{_id: 1, key: A, someData: 'abc'},
{_id: 2, key: B, someData: 'def'},
{_id: 3, key: A, someData: 'ghi'},
{_id: 4, key: C, someData: 'jkl'},
{_id: 5, key: C, someData: 'mno'}]

我应该如何编写我的 mongoDB 查询以返回带有一些附加字段的不同结果?

预期的结果应该是:

[{key: A, someData: 'ghi'},
{key: B, someData: 'def'},
{key: C, someData: 'mno'}]

请注意,上述结果将返回每个不同键的最新记录(例如,对于键 = 'A',_id = 3 的记录与 _id = 1 相比是最新的)。

提前感谢您的帮助和感谢!

【问题讨论】:

    标签: javascript node.js mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您想要.aggregate(),它专门将$last 作为$group 的累加器:

    db.collection.aggregate([
      { "$sort": { "_id": 1 } },           // Sorting by order for "latest"
      { "$group": {
        "_id": "$key",
        "someData": { "$last": "$someData" }
      }}
    ])
    

    通常,当您需要特定顺序时,您会使用$sort,因为“last”意味着您需要特定顺序,因此分组边界内的位置很重要。

    另请注意,$last 的含义与$max 完全不同,前者取决于“顺序”,如前所述,“顺序”通常是“排序”的。另一方面,$max 运算符只是从分组边界内的任何位置获取“最大”。

    通常,如果您希望返回除分组键之外的多个属性,则实际上是指$last

    【讨论】:

      【解决方案2】:

      我认为你可以使用 db.collection.distinct(fields,query)

      db.collection.distinct('key')
      

      【讨论】:

      • 但是如何为每个不同的记录返回不同键以外的字段?
      • @oatcrunch 他们实际上不知道,只是在您的问题标题中看到“不同”,然后复制了他们找到的第一个答案。因此,为什么只用链接评论。
      猜你喜欢
      • 1970-01-01
      • 2014-02-13
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多