区别于键,然后获得除键之外的字段的结果

时间:2017-11-06 04:13:11

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

鉴于我在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'}]

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

提前获得一些帮助并表示感谢!

2 个答案:

答案 0 :(得分:2)

您希望.aggregate()具体$last作为$group的累加器:

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

通常,当您需要特定订单时,您会使用$sort,因为“最后”意味着您需要特定订单,因此某些内容位于分组边界内非常重要。

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

通常,如果您想要返回多个除分组键以外的其他属性,那么您实际上是指$last

答案 1 :(得分:0)

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

db.collection.distinct('key')