根据MongoDB中的两个字段获取所有最大值

时间:2016-11-14 14:27:43

标签: mongodb max

我想知道是否有从MongoDB数据库获取的方法,基于属性的最大值(例如:版本控制),

在我的情况下,我有两个文件

   [{_id:"fjezfjojef", book:"Don't Kill The Mockinbird", version:1},
   {_id:"fjezfjojeg", book:"Don't Kill The Mockinbird", version:2}]

我想从Mongo获得,只有最后一个版本,解决这个问题的最佳方法是什么?

我正在使用Mongo 3.2.9

3 个答案:

答案 0 :(得分:1)

试试这个:

这将按书名分组 - 并返回每本书的最大版本文件。

db.books.aggregate([
    { $group: { _id: "$book", "version": { "$max": "$version" } } }
])

答案 1 :(得分:1)

所以我想告诉你查找查询和聚合之间的区别。

假设我们有以下文件:

  

db.books.find({},{_ id:0})

{ "book" : "To Kill a Mockingbird", "version" : 1 }
{ "book" : "To Kill a Mockingbird", "version" : 2 }
{ "book" : "To Kill a Mockingbird", "version" : 3 }
{ "book" : "MongoDB Learning", "version" : 1 }
{ "book" : "MongoDB Learning", "version" : 2 }
{ "book" : "MongoDB Learning", "version" : 3 }
{ "book" : "Test Book", "version" : 1 }
{ "book" : "Test Book", "version" : 2 }

如果您运行查询查询 - 您只会返回匹配的书:

  

db.books.find({book:" To Kill a Mockingbird"},{_ id:0})。sort({version:-1})。limit(1)

{ "book" : "To Kill a Mockingbird", "version" : 3 }

如果您运行聚合查询 - 您将获得所有书籍,然后返回每个书籍的最大版本。

  

db.books.aggregate([   ...... {$ group:{_ id:" $ book"," version":{" $ max":" $ version" }}}   ......])

{ "_id" : "Test Book", "version" : 2 }
{ "_id" : "MongoDB Learning", "version" : 3 }
{ "_id" : "To Kill a Mockingbird", "version" : 3 }

答案 2 :(得分:0)

db.books.find({'book':"Don't Kill The Mockinbird"}).sort({version:-1}).limit(1)