Php 如果字段值不可用,mongodb中的响应时间太长

Php 如果字段值不可用,mongodb中的响应时间太长,php,mongodb,Php,Mongodb,我在mongodb集合/表中插入了记录。如果我传递集合中可用的数据(如StoreId=1),一切正常 问题:如果我搜索集合中不可用的数据,如StoreId=3,则响应时间太长,为什么????我如何简化这个问题 插入数据: $data = array(); $data[] = array("StoreId" => "1","StoreName" => "abc"); $data[] = array("StoreId" => "2","StoreName" => "xyz")

我在mongodb集合/表中插入了记录。如果我传递集合中可用的数据(如StoreId=1),一切正常

问题:如果我搜索集合中不可用的数据,如StoreId=3,则响应时间太长,为什么????我如何简化这个问题

插入数据:

$data = array();
$data[] = array("StoreId" => "1","StoreName" => "abc");
$data[] = array("StoreId" => "2","StoreName" => "xyz");
$db->test->insertMany($data);   
$arrFind = array(
                    '$and' => array(
                        array(
                            'StoreId' => "1"
                        ),
                        array(
                            'StoreName' => array(
                                        '$regex' => '^ab',
                                        '$options' => 'i'
                                    )
                        )
                    )
                );

$projection =  array("_id" => false);
$result = $db->test->find($arrFind,['limit'=>$data['Count'], 'projection' => $projection ]);
$array1 = iterator_to_array($result, false);
echo "<pre>";
print_r($array1);
db.test.getIndexKeys();
获取记录:

$data = array();
$data[] = array("StoreId" => "1","StoreName" => "abc");
$data[] = array("StoreId" => "2","StoreName" => "xyz");
$db->test->insertMany($data);   
$arrFind = array(
                    '$and' => array(
                        array(
                            'StoreId' => "1"
                        ),
                        array(
                            'StoreName' => array(
                                        '$regex' => '^ab',
                                        '$options' => 'i'
                                    )
                        )
                    )
                );

$projection =  array("_id" => false);
$result = $db->test->find($arrFind,['limit'=>$data['Count'], 'projection' => $projection ]);
$array1 = iterator_to_array($result, false);
echo "<pre>";
print_r($array1);
db.test.getIndexKeys();
解释:

$data = array();
$data[] = array("StoreId" => "1","StoreName" => "abc");
$data[] = array("StoreId" => "2","StoreName" => "xyz");
$db->test->insertMany($data);   
$arrFind = array(
                    '$and' => array(
                        array(
                            'StoreId' => "1"
                        ),
                        array(
                            'StoreName' => array(
                                        '$regex' => '^ab',
                                        '$options' => 'i'
                                    )
                        )
                    )
                );

$projection =  array("_id" => false);
$result = $db->test->find($arrFind,['limit'=>$data['Count'], 'projection' => $projection ]);
$array1 = iterator_to_array($result, false);
echo "<pre>";
print_r($array1);
db.test.getIndexKeys();

因为您没有任何可用于此查询的索引,所以MongoDB需要检查集合中的每个文档。在大型集合上,集合扫描(“COLLSCAN”)相当慢。您需要从
StoreId
元素创建索引。

因为您没有任何可用于此查询的索引,所以MongoDB需要检查集合中的每个文档。在大型集合上,集合扫描(“COLLSCAN”)相当慢。您需要从
StoreId
元素创建索引。

您好,看看您的问题,它检查了大约6816823条记录,似乎还没有创建二级索引

您需要在“StoreId”上创建索引以减少查找

您可以使用以下命令检查为集合创建的所有索引

db.test.createIndex( { StoreId: 1 } );
要创建索引,可以使用以下命令

在集合上创建索引后,请尝试运行查询,查询速度应该很快

更多信息

您好,看看您的问题,它检查了大约6816823条记录,似乎还没有创建二级索引

您需要在“StoreId”上创建索引以减少查找

您可以使用以下命令检查为集合创建的所有索引

db.test.createIndex( { StoreId: 1 } );
要创建索引,可以使用以下命令

在集合上创建索引后,请尝试运行查询,查询速度应该很快

更多信息