标签: doctrine-odm

MongoDB ODM如何使用map/reduce对某个字段进行分组?

我有一个文档集合,我想通过某个字段查询,按字段location对它们进行排序pos,并且只返回每个pos字段的最高值.

所以现在的查询看起来像这样:

$locations = array(1,2,3,4,5,6);

   $results = $this->dm->createQueryBuilder('\App\Document\Test')
        ->select('id', 'word', 'pos','change', 'title', 'coll_at', 'location')
        ->field('location')->in($locations)
        ->sort('location', 'asc')
        ->sort('pos', 'asc')
        ->getQuery()->execute();
Run Code Online (Sandbox Code Playgroud)

但是因为location每个具有不同的特定条目可以有多个条目pos,所以我必须创建一个foreach循环来操作之后的数据.在这种情况下,我可以采用该快捷方式只是在返回数据后更改数据,但我还有其他情况,根本不能这样做.所以我创建了这个较小的场景,试图找出如何使用Doctrine ODM的group查询,甚至是映射和减少它.不确定最好的方法.我看到很多获得跑步总数等的例子.

那么我如何创建一个查询来获得pos每个特定字段中最高的数值location?知道可能存在多个具有相同location但不同pos值的文档.最重要的是,拥有我在上面列出的所选记录的所有字段->select()

php doctrine mapreduce mongodb doctrine-odm

1
推荐指数
1
解决办法
7509
查看次数

Symfony 4。ParamConverter 注释冲突通过自动装配注入服务

当我尝试在 Controller 操作中使用 @ParamConverter 注释时,出现错误

"Cannot resolve argument $company of \"App\\Controller\\ProfileController::top()\": Cannot autowire service \".service_locator.0CrkHeS\": it references class \"App\\Document\\Company\" but no such service exists."
Run Code Online (Sandbox Code Playgroud)

我知道这样的服务不存在,因为我已经排除Documentservices.yaml. 我只需要从 Repostiroy 中找到一个 Company 文档对象。

这是我的控制器代码:

<?php

// src/Controller/ProfileController.php
namespace App\Controller;

use App\Document\Company;
use App\Service\DocumentManager\CompanyManager;
use FOS\RestBundle\Controller\FOSRestController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Swagger\Annotations as SWG;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * @Route("/profile")
 */
class ProfileController extends FOSRestController
{
    /**
     * @Route("/top/{id}")
     * @Method("GET")
     * @SWG\Response(
     *     response=200,
     *     description="Returns top profiles", …
Run Code Online (Sandbox Code Playgroud)

php autowired doctrine-orm doctrine-odm symfony4

1
推荐指数
1
解决办法
2995
查看次数

尝试从命名空间“MongoDB\Driver\Monitoring”加载接口“CommandSubscriber”

我有 Symfony 5 项目,只需按照说明安装 DoctrineMongoDBBundle 包,我收到以下错误,

尝试从命名空间“MongoDB\Driver\Monitoring”加载接口“CommandSubscriber”。您是否忘记了另一个命名空间的“use”语句?

/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/APM/CommandLoggerInterface.php(第 9 行)

我正在运行以下版本的 mongodb 和原则。

  • 学说/mongodb-odm-bundle”:4.1
  • mongodb/mongodb": 1.6

还通过 Pecl 安装了 php 驱动程序(版本 1.7.4)

有人对我所缺少的有任何想法吗?

mongodb symfony doctrine-odm symfony5

0
推荐指数
1
解决办法
1133
查看次数

Doctrine ODM - PHP7 - 不能使用 Int/String 作为类名

在从 PHP 5.5 升级到 PHP 7.0 的过程中,Symfony 项目遇到了问题。

已遵循http://www.doctrine-project.org/2016/06/09/odm-1-1-0-and-1-0-6.html中的步骤,以确保 mongo-ext 符合原则。没有发生兼容性升级。

但出现以下异常:

PHP Fatal error:  Cannot use 'String' as class name as it is reserved in 
... vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/String.php on line 26      
Run Code Online (Sandbox Code Playgroud)

该问题很可能与composer.json 中的配置问题有关

哪个要求阻止作曲家更新安装正确的原则/mongodb?

PHP 版本 7.0.13-0ubuntu0.16.04.1 (cli) (NTS)

{
        "name": "foo/bar",
        "license": "proprietary",
        "type": "project",
        "autoload": {
            "psr-4": {
                "": "src/"
            },
            "classmap": [
                "app/AppKernel.php",
                "app/AppCache.php"
            ]
        },
        "autoload-dev": {
            "psr-4": {
                "Tests\\": "tests/"
            }
        },
        "require": {
            "php": "^7.0",
            "symfony/symfony": "3.2.*",
            "doctrine/orm": "^2.5",
            "doctrine/doctrine-bundle": "^1.6",
            "doctrine/doctrine-cache-bundle": …
Run Code Online (Sandbox Code Playgroud)

mongodb symfony doctrine-odm php-7

-1
推荐指数
1
解决办法
1595
查看次数