在 MongoDB 中,如何根据对象的值对对象进行排序?

Posted

技术标签:

【中文标题】在 MongoDB 中,如何根据对象的值对对象进行排序?【英文标题】:In MongoDB how do I sort an object based on their values? 【发布时间】:2021-01-08 18:46:20 【问题描述】:

Book 是一个可供用户投票选择的集合。当用户在客户端点击一个赞按钮时,投票会增加 1。我希望根据投票数按降序对集合进行排序,这会反映在前端。

投票正在更新并显示在前端,我只是无法使用排序功能。

update: function (req, res) 
    console.log("this is reqbody" + JSON.stringify(req.body))
    db.Book
      .findOne( bookID: req.body.bookID , (err, result) => 
        console.log(result);
        console.log(result.vote)
        // let voted = result.vote + 1;
        db.Book.updateOne( _id: result._id ,  vote: result.vote + 1 )
        
        db.Book.find().sort(vote: 'decending').exec(function(err, docs)

        )
        .then(dbModel => 
            console.log(JSON.stringify(dbModel))
            res.json(dbModel)
          
          )
      
      )
  ,

【问题讨论】:

而不是 findOne 然后更新。您应该使用 findOneAndUpdate 并使用 $inc 运算符来增加投票。 这能回答你的问题吗? In Mongoose, how do I sort by date? (node.js) 【参考方案1】:

根据documentation,您应该使用1-1sort() mongodb 调用中订购您的订单。

在 sort 参数中指定要排序的一个或多个字段,值 1 或 -1 分别指定升序或降序。

db.Book.find().sort(vote: -1)

【讨论】:

感谢您指出这一点。在文档中完全忽略了这一点。能够使用值 -1 使其工作。

以上是关于在 MongoDB 中,如何根据对象的值对对象进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个地图中的值对Java Map进行排序

如何按对象中的值对数组进行排序

如何根据属性值对对象列表进行排序

spring mongodb - 排序嵌套集合字段

按对象属性之一的值对对象列表进行排序,其中只有一个值是感兴趣的

我们如何根据节点js中的另一个对象数组值对对象数组进行排序