我在我的后端使用symfony2作为REST API。一切都运行正常,但随着数据库大小的增加,创建/更新操作变得越来越慢(目前~13秒!!)。
我调试了这种情况,发现handleRequest()
上的FormInterface
导致了问题。
POST请求正文
{
"name": "Group1",
"users": ["id1", "id2", "id3"]
}
我使用此接收的请求在后端创建表单。
$form = $this->formFactory->createNamed('group', 'group', $groupData, array('method' => $request->getMethod()));
然后,$form->handleRequest($request);
当调用handleRequest时,它会与其他查询一起生成此查询,这就是问题所在。
db.users.find({}).sort([ ]);
它正在加载整个集合,这是因为构建表单时的这一行:
$builder->add('users',
'document',
array('class' => 'Test\Bundle\CoreBundle\Document\User',
'multiple' => true,
'property' => 'id'
)
);
我在建造者身上做错了吗?现在我已经重新编写了我的补丁/帖子请求,只加载了所需的用户,将它们添加到组中并在不使用FormInterface的情况下保留组。