3

我有一些具有以下结构的 mongoDB 文档:

[_id] => MongoId Object (
  [$id] => 50664339b3e7a7cf1c000001
)
[uid] => 1
  [name] => Alice
  [words] => 1
  [formatIds] => Array (
        [0] => 1
        [1] => 4
  )

我想要做的是找到 formatIds[] 中值为 1 的所有文档。我认为有可能做到这一点。我怎样才能在 PHP 中做到这一点?

更新

谢谢您的帮助。它现在工作正常。这是我编写搜索的方式,

$id=$_POST['id'];
$query = array('formatIds'=> "{$id}" );
$result = $stations_table->find($query); //where $stations_table = $db->stations;
4

3 回答 3

3

根据docs,MongoDB 以与查询标准值相同的方式处理对数组值的查询。

查询array('formatIds' => 1)应该工作。

于 2012-10-03T17:05:11.777 回答
1

由于 MongoDB 将数组“转换”为同一键的多值:

$cursor = $mongo->base->collection->find(array('formatIds' => 1));

正确定义 mongo 对象并设置基本/集合字符串。

于 2012-10-03T08:49:56.267 回答
0

这取决于您是否只想要与查询匹配的文档或值。

如果您不介意拉出整个阵列然后在客户端搜索它,您当然可以使用:

$c = $db->col->find(array('formatIds' => 1))

由于 MongoDB 中的一维数组可以像单个字段一样进行搜索。

但是现在只获取与您的查询匹配的那些,因为上面的查询将挑选出所有:

$db->command(array(
    'aggregate' => 'col',
    'pipeline' => array(
        array('$unwind' => "$formatIds"),
        array('$match' => array('formatIds' => 1)),
        array('$group' => array(
            '_id' => '$_id', 
            'formats' => array('$push' => '$formatIds'))
        )
    )
)

使用类似的东西。

这将为您提供文档的结果和_id数组中仅包含值行的字段。_idformats1

于 2012-10-03T10:27:44.083 回答