我想知道是否有从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
答案 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)