鉴于我在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相比)。
提前获得一些帮助并表示感谢!
答案 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')