当前位置: 首页 > 面试题库 >

猫鼬对汇总结果进行排序

谷博艺
2023-03-14
问题内容

我在解决此mongodb(猫鼬)问题时遇到很多困难。

存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。

我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。

var recommendSchema = mongoose.Schema({
    username: String,
    roomId: String,
    ll: { type: { type: String }, coordinates: [ ] },
    date: Date
})
recommendSchema.index({ ll: '2dsphere' });

var Recommend = mongoose.model('Recommend', recommendSchema);
Recommend.aggregate(
        {   
          $group: 
            { 
                _id: '$roomId', 
                recommendCount: { $sum: 1 } 
            }
        },
        function (err, res) {
            if (err) return handleError(err);
            var resultSet = res.sort({'recommendCount': 'desc'});

        }
    );

问题答案:

从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行:

Recommend.aggregate(
    [
        // Grouping pipeline
        { "$group": { 
            "_id": '$roomId', 
            "recommendCount": { "$sum": 1 }
        }},
        // Sorting pipeline
        { "$sort": { "recommendCount": -1 } },
        // Optionally limit results
        { "$limit": 5 }
    ],
    function(err,result) {

       // Result is an array of documents
    }
);

因此,也可以使用多种流水线运算符
$group


$sort


$limit
和其他东西。这些可以按任意顺序显示,并且可以根据需要多次显示。仅仅了解一个“管道”阶段的流程会导致下一步行动。



 类似资料:
  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast

  • 每当文档更新时,mongo db都会对文档进行重新排序。我不希望这种情况发生,所以我发现使用order by_id可以以一致的顺序返回文档。但现在我无法分类。下面是我的查找查询,它查找特定用户创建的帖子,我正在尝试按_id.代码进行排序:

  • 我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。

  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 问题内容: 我正在尝试使用Mongoose制作动态条件,但是它并没有像我想象的那样起作用。 代码是这样的 如您所见,我正在尝试使用“索引”变量创建动态条件。有可能这样做吗? 先感谢您! 问题答案: 您需要分两步创建对象: 更新资料 现在,node.js 4+支持计算的属性名称,您可以一步完成此操作: