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

如何创建MongoDB普通查询检查字段是否包含同文档另一字段值

解决MongoDB普通查询中检查字段包含同文档另一个字段值的问题

问题核心

需要在**普通查询(非聚合)**中实现:检查title字段是否包含同文档的brand字段值,同时保留现有嵌套条件逻辑,使用MongoDB 6.0.1+及最新PHP驱动。

原代码错误点

  1. $toString语法错误:原写法用数组包裹字段引用,正确的表达式应为直接指定字段路径"$title"
  2. $not结构错误:无需额外嵌套数组,$regexMatch可直接作为$not的参数
  3. 缺失brand类型转换:未将brand转为字符串,可能导致正则匹配失败

修正后的条件代码片段

[1] => Array
    (
        ['$expr'] => Array
            (
                ['$not'] => Array
                    (
                        ['$regexMatch'] => Array
                            (
                                'input' => ['$toString' => '$title'],
                                'regex' => ['$toString' => '$brand'],
                                'options' => 'i'
                            )
                    )
            )
    )

完整整合后的查询数组

Array
(
    ['$and'] => Array
        (
            [0] => Array
                (
                    ['$and'] => Array
                        (
                            [0] => Array
                                (
                                    ['$and'] => Array
                                        (
                                            [0] => Array
                                                (
                                                    'brand' => Array
                                                        (
                                                            ['$exists'] => true
                                                        )
                                                )
                                            [1] => Array
                                                (
                                                    'brand' => Array
                                                        (
                                                            ['$ne'] => ''
                                                        )
                                                )
                                            [2] => Array
                                                (
                                                    'brand' => Array
                                                        (
                                                            ['$ne'] => null
                                                        )
                                                )
                                        )
                                )
                            [1] => Array
                                (
                                    ['$expr'] => Array
                                        (
                                            ['$not'] => Array
                                                (
                                                    ['$regexMatch'] => Array
                                                        (
                                                            'input' => ['$toString' => '$title'],
                                                            'regex' => ['$toString' => '$brand'],
                                                            'options' => 'i'
                                                        )
                                                )
                                        )
                                )
                        )
                )
        )
)

关键说明

  • $expr的作用:允许在普通查询条件中使用聚合表达式,满足不使用聚合流程的要求
  • $toString:确保title和brand都转为字符串类型,避免类型不匹配导致的正则匹配失败
  • $regexMatch:MongoDB 4.2+支持的表达式,用于在$expr中执行正则匹配,其中regex参数可直接引用同文档字段
  • options: 'i':开启大小写不敏感匹配,可根据业务需求移除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:13:14