You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB的$slice操作符在PHP中无法生效,求排查建议

问题分析与解决方案

你遇到的这个问题,核心原因是PHP MongoDB扩展版本的语法差异导致投影规则不生效。下面分两种常见情况给你解决办法:

情况1:使用官方推荐的mongodb扩展(主流版本)

从mongodb扩展1.0版本开始,查询的第二个参数不再直接是投影数组,而是需要把投影配置放在projection选项里。你的原有写法没有遵循这个规则,所以投影被忽略,导致返回了完整的activity_log数组。

正确的写法应该是这样:

$get_current_activity = $this->mongo_b_employee->b_activity->findOne(
    ['token_id' => $token_id],
    ['projection' => ['activity_log' => ['$slice' => -1]]]
);

情况2:使用旧的mongo扩展(已废弃,不建议继续使用)

如果还在使用已停止维护的旧mongo扩展,你的原有写法本身是正确的,但可能出现以下问题导致投影失效:

  • 扩展版本过旧:建议升级到最新的旧版本(虽然已经停止更新)
  • 代码中存在其他投影冲突:检查是否有其他地方修改了查询的投影配置

你可以通过以下代码确认自己使用的扩展版本:

// 检查新扩展版本
echo phpversion('mongodb');
// 检查旧扩展版本(如果安装了的话)
echo phpversion('mongo');

调整写法后,就能像MongoDB Shell中一样,只返回activity_log数组的最后一个元素了。

内容的提问来源于stack exchange,提问作者confused_geek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:39:48