使用PHP在MongoDB中获取条件为“对象数组”字段的文档

问题描述

我看到了其他类似的问题来查询数组字段,但是其中大多数是纯Mongo的问题,我无法将解决方案转换为PHP的驱动程序'find()'。

我也找到了类似的问题here,但是我无法用它来解决我的问题。

PHP driver's documentation也无济于事,有一个find()的例子,但字段不是我的数组。

引起我麻烦的字段是“ Sentenca”,它是一个包含“ Situacao”和“ Prob”的数组。如下所示:

"Sentenca": [{
        "Situacao": "nc","Prob": 0.96
        }]

enter image description here

“ Sentenca”始终仅包含带有这两个字段的一个索引[0]。

我需要查询“ Situacao”不是“ nc”的所有文档。我所知道的是,我应该使用操作符$ nin,但是我不知道如何使用find()来完成该操作。

我得到的最远的是这个(这个查询没有满足我的需要):

$result = $collection->find( [ "Sentenca"=>["Situacao"=>['$nin'=>["nc"]]]] );

编辑:我设法使用$ Sinacao的$ nin条件进行查询,但由于某种原因,该查询未返回任何内容。如果我尝试回显条目,则会收到错误消息:

Uncaught MongoDB\Driver\Exception\LogicException: Cursors cannot yield multiple iterators

解决方法

MongoDB论坛上的某人解决了该问题。您可以使用 '。'访问数组元素,然后使用$ nin =>'nc'。

$result = $collection->find([

    "Sentenca.0.Situacao" => [
        '$nin' => ["nc"]
    ]
    
]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...