我是MongoDB的新手,正在NodeJS代码中使用它。
正如您所看到的下面的代码,我正在对我的图书集运行for循环,以找出query_book
的最新版本。
我知道这并不有效,我想了解如何在MongoDB中为其编写聚合函数。
当前代码:
let result= {};
_.forEach(books, function(query_book)
{
if(!result[query_book.book_id])
{
result[query_book.book_id] = query_book
}
else if(result[query_book.book_id].book_version <
query_book.book_version)
{
result[query_book.book_id] = query_book
}
books
:的数据对象
[
{
"book_id": "ab12nld”,
"book_version": "0”,
"author": “Sam”,
“name”: “Sample Book”,
“comments”: “Done”
},
{
"book_id": "ab12nld”,
"book_version": "1",
"author": "Martin",
"name": "Sample Book",
“comments”: “In Progress”
},
{
"book_id": "ab12nld”,
"book_version": "2",
"author": "Roy",
"name": "Sample Book",
“comments”: “To-Do”
}
]
[
{
"book_id": "bcj123n”,
"book_version": "0”,
"author": “Don”,
“name”: “Another Book”,
“comments”: “Done”
},
{
"book_id": "bcj123n”,
"book_version": "1",
"author": "Ray",
"name": "Another Book",
“comments”: “In Progress”
},
{
"book_id": "bcj123n”,
"book_version": "2",
"author": "Max",
"name": "Another Book",
“comments”: “To-Do”
}
]
在这种情况下,我想为我的输入book_id
获取具有最大值book_version
的对象,即ab12nld
:
{
"book_id": "ab12nld”,
"book_version": "2",
"author": "Roy",
"name": "Sample Book",
“comments”: “To-Do”
}
如果使用Node.js Mongo驱动程序(用您的输入替换[bookId]
(
db.collection('books')
.findOne({ book_id: [bookId] }, { sort: [['book_version', -1]] })
或者,如果使用Mongoose,
Book.findOne({ book_id: [bookId] }).sort({ book_version: -1 })
db.books.aggregate([{ "$sort": { "book_version": -1 } },{"$limit":1}])
我知道您想要检索一个字段值最高的文档。
这里,在version
字段中具有最高值的文档。最简单的方法是按相反的顺序sort
并获得第一个文档。
您也可以使用聚合方法。
请尝试以下片段。我认为这会有所帮助。
db.books.find().sort({"book_version":-1}).limit(1);