使用PHP在MongoDB数组中进行搜索

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;

你的缩进有个 bug 吧? - Aurélien B
我不这么认为.. 我终于解决了它.. - Manu
3个回答

3
MongoDB对数组值的查询与标准值的查询相同,详见文档
查询array('formatIds' => 1)应该可以正常工作。

1

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

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

在正确定义Mongo对象和设置base/collection字符串的情况下。


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是文档的_id,并且formats字段只包含数组中值为1的行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接