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

MongoDB嵌套对象查询含指定章节标题文档及Laravel库推荐

查询包含标题为'ch2'章节的文档(基于jenssegers/laravel-mongodb)

首先,你的chapters字段是嵌套对象而非数组,没法直接用MongoDB的数组查询操作符(比如$elemMatch),得针对这个结构调整查询方式:

方法1:精准匹配已知章节位置

如果确定章节的键固定为0、1、2这三个,直接用$or覆盖所有可能的路径即可:

use Jenssegers\Mongodb\Eloquent\Model;

class Book extends Model
{
    protected $collection = 'books';
}

$targetBooks = Book::where(function ($query) {
    $query->where('chapters.0.title', 'ch2')
          ->orWhere('chapters.1.title', 'ch2')
          ->orWhere('chapters.2.title', 'ch2');
})->get();

方法2:通用匹配(适配任意数量章节)

如果章节的键不固定、数量可能变化,可以用MongoDB的$where操作符实现遍历匹配(注意:该方法性能略低,不建议在超大数据集上使用):

$targetBooks = Book::whereRaw('function() {
    for (let key in this.chapters) {
        if (this.chapters[key].title === "ch2") return true;
    }
    return false;
}')->get();

Laravel操作MongoDB的更优库推荐

目前更推荐使用MongoDB官方维护的Laravel集成包:mongodb/laravel-mongodb(原jenssegers/mongodb由官方接手维护,现在是MongoDB官方支持的正式包)。它的更新节奏和Laravel、MongoDB新特性同步,兼容性更好,文档也更完善。

安装方式(Composer):

composer require mongodb/laravel-mongodb

它的使用语法和你当前用的jenssegers版本高度兼容,模型定义、查询写法基本可以无缝切换,学习成本很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:33