使用 Laravel MongoDB 按最多投票(总体投票、上个月投票等)排序帖子

2024-01-16

我试图了解 mongodb 和 laravel 的更高级功能,但遇到了麻烦。目前我的架构设置是users, posts, and posts_votes收藏。这posts_votes has a user_id, post_id and timestamp field.

在关系数据库中,我只需离开加入posts_votes收集、计数并按计数排序。需要时排除日期等等。

MongoDB 我遇到了困难,因为没有左连接等效项。所以我想学习如何以更加文档化的方式实现我的目标。

On my PostLaravel 中的模型,我是这样引用的。因此,查看单个帖子,我可以获得投票数,查看当前用户是否投票给特定帖子等。

public function votes()
{
  return $this->hasMany(PostVote::class, 'post_id');
}

我当前的工作查询如下所示:

$posts = Post::forCategoryType($type)
    ->with('votes', 'author', 'businessType')
    ->where('approved', true)
    ->paginate(25);

The forCategoryType方法只是我添加的扩展范围。这是在Post模型/文档类。

public function scopeForCategoryType($builder, $catType)
{
  if ($catType->exists) {
    return $builder->where('cat_id', $catType->id);
  }
  return $builder;
}

所以当我看像这样的帖子 https://stackoverflow.com/questions/11312419/mongodb-schema-design-voting-on-posts,它接近我想要完成的目标,但我没有正确应用它。例如,我将主查询更改为如下所示:

$posts = Post::forBusinessType($type)
    ->with('votes', 'author', 'businessType')
    ->where('approved', true)
    ->sortByVotes()
    ->paginate(25);

并创建了这个新方法Post model:

public function scopeSortByVotes($builder, $dir = 'desc')
{
  return $builder->raw(function($collection) {
   return $collection->aggregate([
    ['$group' => [
        '_id' => ['post_id' => 'votes.$post_id', 'user_id' => 'votes.$user_id']
      ], 
      'vote_count' => ['$sum' => 1]
    ],
    ['$sort' => ['vote_count' => -1]]

  ]);

});
}

这会返回错误exception: A pipeline stage specification object must contain exactly one field.

不知道如何解决这个问题(仍在寻找),所以我尝试了:

return $collection->aggregate([
        ['$unwind' => '$votes'],
        ['$group' => [
            '_id' => ['post_id' => ['$votes.post_id', 'user_id' => '$votes.user_id']],
            'count' => ['$sum' => 1]
          ]
        ]
      ]);

返回一个空的ArrayIterator,所以我尝试了:

public function scopeSortByVotes($builder, $dir = 'desc')
  {
    return $builder->raw(function($collection) {
       return $collection->aggregate([
    '$lookup'    => [
      'from' => 'community_posts_votes',
      'localField' => 'post_id',
      'foreignField' => '_id',
      'as' => 'vote_count'            
    ]
  ]);

    });
  }

但在这种设置下,我只是得到未排序的帖子列表。在版本 3.2.8 上。

默认加载最新的所有内容。但最终我希望能够根据这些帖子一生获得的票数来提取这些帖子,同时也根据哪些帖子在上周、上个月等获得最多票数进行查询。

我分享的那个例子将总计链接在Post模型和所有对其进行投票的用户 ID 的数组。我使用一个单独的集合来设置事物的方式user_id, post_id以及投票发生的时间戳,我还能实现同样的目标吗?

注意:使用这个Laravel MongoDB 库 https://github.com/jenssegers/laravel-mongodb.


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Laravel MongoDB 按最多投票(总体投票、上个月投票等)排序帖子 的相关文章

  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • Inno Setup安装先决条件[重复]

    这个问题在这里已经有答案了 我正在通过 Inno Setup 创建一个安装程序 我看到很多关于如何检测先决条件是否存在的代码示例 但没有任何关于当我找不到先决条件时如何实际安装先决条件的代码示例 我确信它非常简单 但是我该如何安装先决条件呢
  • 使用 Javascript 和 Mongodb 对时间序列数据重新采样

    时间序列数据的数据集需要从具有不规则时间间隔的数据集转换为规则时间序列 可能使用插值和重采样 蟒蛇的pandas Dataframe resample http pandas pydata org pandas docs stable ge
  • 在 Windows 7 - 64 位上安装 Mongodb

    我是 mongodb 的新手 不知道如何安装它 因为我找不到视频或任何有用的资源来实现相同的目的 请帮助我在 Windows 7 上安装 mongodb 并提供确切的步骤 我尝试从该网站下载最新版本的 mongodb 但不成功 提前致谢 R
  • 我如何在 mongodb 的数组中找到文本搜索

    id objectId 23651478 name Tomatos array title Vegetables description Vegitables are good to health id objectId 45761244
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • 更新插入 MongoDB 时如何防止出现“_t”字段?

    我有一个应用程序 它使用 MongoDB 的 C 驱动程序将 Upsert 插入 MongoDB 数据库 当我打电话给Update函数 我无法指定我要更新的类型 然后 t字段插入元素的类型 这是我用来更新插入的代码 collection U
  • MONGODB [DEBUG] 游标的cursor.refresh() 7078636577051629992

    更新大型 json 列表时 出现以下错误 2012 04 01T09 34 00 00 00 app run 1 MONGODB DEBUG cursor refresh for cursor 7078636577051629992 201
  • Mongo C# 驱动程序更新嵌套数组中的特定元素

    如何在 Mongo C 驱动程序 中修改嵌套属性 数组 中的单个元素而不检索整个文档 public class Element public int Value get set public string Name get set publ
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • Strapi 未加载 Digital Ocean 上托管的现有 MongoDB 中的集合

    我正在使用 Strapi 创建一个新应用程序 并尝试将其与托管在 Digital Ocean 上的 MongoDB 连接 但不幸的是Strapi 无法从现有 MongoDB 获取集合 在这里 我提到我实现 Strapi 与现有 MongoD
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 修复数据库需要多少额外空间

    我已经问过了这个问题在 mongodb google group https groups google com d topic mongodb user oi6S LKfTrs discussion 在没有任何回复的情况下将其发布在这里
  • 未找到“MongoId”类(带有 MongoDB Doctrine 的 Zend 框架)

    我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成 我做了很多教程 在 StackOverflow 或其他地方 但没有任何效果 我一步步按照教程进行操作 http www bigwisu com
  • Mongodb $push 嵌套数组

    我想向我的嵌套数组添加新数据 我的文档是 username erkin email email protected cdn cgi l email protection password b playlists id 58 name asd
  • Java/MongoDB 按日期查询

    我将一个值作为 java util Date 存储在我的集合中 但是当我查询以获取两个特定日期之间的值时 我最终得到的值超出了范围 这是我的代码 插入 BasicDBObject object new BasicDBObject objec
  • MongoDB:如果使用 $addToSet 或 $push,是否应该预先分配文档?

    我一直在研究 MongoDB 我知道强烈建议在插入时完全构建 预分配 文档结构 这样将来对该文档的更改不需要移动该文档磁盘周围 这在使用 addToSet 或 push 时适用吗 例如 假设我有以下文档 id rsMH4GxtduZZfxQ
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序
  • MongoDB 3.0 Windows 服务启动:发生系统错误 2

    我已经下载了 MongoDB Windows msi 安装并成功运行 mongod exe 和 mongo exe 命令文件执行工作正常 安装手册展示了如何创建配置文件 然后使用命令创建Windows Server sc exe creat

随机推荐

  • CPU 因 attributeOfItemAtPath:error: 而引发

    我在用 NSFileManager attributesOfItemAtPath error 获取文件属性的函数 但有时我的应用程序 cpu 会达到 100 我正在使用此函数处理 100k 大约 个文件 我的申请样本 2128 NSFile
  • ORMLite Android 中的一对多关系

    如何在 ORMLite Android 中实现一对多关系 请找到示例 public class A private String name DatabaseField foreign true foreignAutoRefresh true
  • 将“page-break-before”应用于表行 (tr)

    根据 W3 org 的说法 这种风格page break after适用于块级元素 http www w3 org TR 2004 CR CSS21 20040225 page html page break props http www
  • 检测到 DisconnectedContext

    我需要帮助消除此错误 为此 RuntimeCallableWrapper 转换到 COM 上下文 0x465608 失败并出现以下错误 系统调用失败 例外情况来自 HRESULT 0x80010100 RPC E SYS CALL FAIL
  • ight_layout() 不考虑图副标题

    如果我向 matplotlib 图添加副标题 它就会被子图的标题覆盖 有人知道如何轻松解决这个问题吗 我尝试过tight layout 功能 但这只会让事情变得更糟 Example import numpy as np import mat
  • docker 卷类型之间的区别 - 绑定与卷

    TLDR In docker compose 有什么区别 volumes type volume source mydata target data and volumes type bind source mydata target da
  • Java锁概念内部是如何工作的?

    类的每个实例Object 及其子类 拥有一个在进入某个对象时获得的锁synchronized方法并在退出时自动释放 这是否意味着我们创建的任何对象实例在内部默认都有一个 锁 作为字段实现 我对这个 锁 概念感到困惑 我想知道它内部实际上做了
  • 两个列表之间的差异

    我有两个填充了 CustomsObjects 的通用列表 我需要在第三个列表中检索这两个列表之间的差异 第一个列表中的项目 第二个列表中的项目 我在想使用 Except 是个好主意 但我不知道如何使用它 帮助 Using Except这正是
  • 在该命名空间中的另一个函数内转发声明该命名空间中的函数

    我有两个源文件 a cpp and b cpp In a cpp 我有一个函数 foo namespace ns void foo std cout lt lt foo In b cpp 我在命名空间中有另一个函数ns我想在其中制作原型并调
  • 在 jar 启动时预加载 java 类/库?

    在对服务器的第一次 RPC 调用期间发生超时 但后续请求成功 服务器响应超时 因为第一次调用时它会加载处理请求所需的库 由于这种延迟 一些客户端会超时 尽管可以增加客户端的超时延迟 但我希望最大限度地减少类加载对应用程序响应能力的影响 您将
  • 用于在 Windows 7 上部署使用 Visual Studio 2015 开发的 C++ exe 的可再发行组件

    我使用 Visual Studio 2015 在 Windows 10 上 开发了一个 32 位 C 应用程序 我想将其部署到运行 Windows 7 及更高版本的计算机上 我组装了一个 WiX 安装程序 并包含了 VC 可再发行合并模块
  • 从 Qt4 移植后,带有 Win32 HWND 嵌入的 Qt5 QWidget::create() 不再工作

    以下代码尝试使用 create 方法将自定义创建的 OpenGL 窗口的本机 Win32 HWND 嵌入到 QWidget 中 viewer widget viewer widget QWidget parent const viewer
  • python 数据库/sql 编程 - 从哪里开始

    使用嵌入式数据库的最佳方式是什么 比如 Python 中的 sqlite 占地面积应该很小 我只需要每个表几千条记录 每个数据库只有少数表 如果它是 Python 默认安装提供的 那就太好了 必须是开源的 可在 Windows 和 Linu
  • 无状态(在谷歌代码上)和Windows工作流之间的比较[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我开始认为我应该放弃 Windows WF 转而使用更简单的东西 我不一定需要长时间暂停工作流程执行并稍后恢复它们 然而 我想要一个简
  • 使用照片框架从图库上传视频

    使用照片框架从图库上传视频的最佳方式是什么 在我使用 ALAssetRepresentation 和 next 方法之前 NSUInteger getBytes uint8 t buffer fromOffset long long off
  • 迭代 2D 数组的“正交”对角线的更 numpy 方式

    我有以下代码 它沿着与通常返回的对角线正交的对角线进行迭代np diagonal 它从位置 0 0 开始并向右下坐标移动 该代码按预期工作 但其所有循环并不是很麻木 并且必须创建许多数组来完成该技巧 效率低下 所以我想知道是否有更好的方法来
  • 如何将 Web assembly/wasm 模块与 Vite 和 Vue 3 一起使用?

    我正在尝试将 wasm 模块导入 vite vue 3 项目 https github com rsms markdown wasm https github com rsms markdown wasm 它抛出以下错误 未捕获的语法错误
  • 通过 Reveal.js 幻灯片实现多重功能

    我想创建Reveal js https github com hakimel reveal js 使用 Slides com 进行演示界面 http slides com 为了节省时间 然后添加多路复用 https github com h
  • 用于源格式化的 Java API

    有几个 PHP 或 js 代码格式化库 有人知道 Java 中是否存在类似的库吗 即 给定一串代码 返回带有语法着色等的格式化字符串 如果它能自动检测到语言 那就太理想了 但我可能会碰碰运气 文本最终将显示在 Flex 应用程序中 所以虽然
  • 使用 Laravel MongoDB 按最多投票(总体投票、上个月投票等)排序帖子

    我试图了解 mongodb 和 laravel 的更高级功能 但遇到了麻烦 目前我的架构设置是users posts and posts votes收藏 这posts votes has a user id post id and time