问题标签 [doctrine-mongodb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
157 浏览

php - 从控制器添加对文档的引用而不事先查询数据库(Symfony/Doctrine MongoDB)

我已经在 StackOverflow 上搜索并阅读了 Doctrine 文档的相应章节(http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/index.html)但找不到我在找什么。

我正在使用 Doctrine MongoDB v1.1 和 MongoDB v3.0.14 数据库使用 Symfony v2.8 制作的 API。

我有两个不同的文档:“Spot”和“Feature”。“Spot”包含文档“Feature”的集合,具有 ReferenceMany 关系:

我正在处理 Spot 创建路由/控制器,我需要在其中发送 Spot 名称、描述和要添加到Spot 的现有功能列表。

我现在要做的是在请求的正文中发送名称、描述和一组功能 ID。然后,在控制器中,我循环遍历这个数组,并且对于每个 id 我:

  • 通过其 id 从 db 获取 Feature 的实例(因此每次迭代一个 db 请求)
  • $spot->addFeature()通过我的方法将其添加到 Spot 对象

然后我坚持并刷新以保存新创建的点。这是我的控制器方法的代码(我修改了代码以使其更具可读性):

以下是 Spot.php 文件中 addFeature() 的代码:

这意味着如果我有一个包含 20 个功能 id 的数组,我的 foreach 循环将请求我的数据库的 20 倍,我知道这不是一个可行的解决方案(我知道我可能可以使用一个请求来获取它们,但这不是我正在寻找)。

有没有办法在知道有引用的情况下将功能分配给 Spot 而不必生成它们的实例并请求我的数据库?

在此先感谢您的帮助!

0 投票
1 回答
988 浏览

mongodb - 尝试从命名空间“MongoDB\BSON”加载类“ObjectID”

我正在尝试使用 DoctrineMongoDBBundle 但它给了我这个错误:

尝试从命名空间“MongoDB\BSON”加载类“ObjectID”。您是否忘记了另一个名称空间的“使用”语句?

我已经到处搜索了一个原因,但我找不到为什么会出现这个错误。

我的 mongodb 安装正常,mongodb 状态告诉我它处于活动状态。我想我正确设置了课程......等等。错误来自哪里?

堆栈跟踪 :

Symfony\Component\Debug\Exception\ClassNotFoundException:试图从命名空间“MongoDB\BSON”加载类“ObjectID”。您是否忘记了另一个名称空间的“使用”语句?

在供应商/alcaeus/mongo-php-adapter/lib/Mongo/MongoId.php:224

在 MongoId->createObjectID(null) (vendor/alcaeus/mongo-php-adapter/lib/Mongo/MongoId.php:41)

在 MongoId->__construct() (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Id/AutoGenerator.php:34)

在 Doctrine\ODM\MongoDB\Id\AutoGenerator->generate(object(DocumentManager), object(Product)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1107)

在 Doctrine\ODM\MongoDB\UnitOfWork->persistNew(object(ClassMetadata), object(Product)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1710)

在 Doctrine\ODM\MongoDB\UnitOfWork->doPersist(object(Product), array('000000002ed55d6b00000000057952ca' => object(Product))) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php :1674)

在 Doctrine\ODM\MongoDB\UnitOfWork->persist(object(Product)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:412)

在 Doctrine\ODM\MongoDB\DocumentManager->persist(object(Product)) (src/Acme/StoreBundle/Controller/DefaultController.php:30)

在 Acme\StoreBundle\Controller\DefaultController->createAction()

在 call_user_func_array(array(object(DefaultController), 'createAction'), array()) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:153) 在 Symfony\Component\HttpKernel\HttpKernel-> handleRaw(对象(请求),1)(供应商/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68)

在 Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true) (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:169)

在 Symfony\Component\HttpKernel\Kernel->handle(object(Request)) (web/app_dev.php:29)

在 require('/var/www/html/geoservicesgrandnancy/web/app_dev.php') (vendor/symfony/symfony/src/Symfony/Bundle/WebServerBundle/Resources/router.php:42)

php --ri mongodb | grep version输出:

MongoDB 扩展版本 => 1.3.2,libbson 捆绑版本 => 1.8.1,libmongoc 捆绑版本 => 1.8.1

演示的简单示例:

并且 composer.json 需要得到:

0 投票
1 回答
710 浏览

php - 安装学说-mongodb-admin-bundle::error:要启用扩展,请验证它们是否在您的 .ini 文件中启用:

我正在使用 Symfony 3.4 Flex 和 sonata-admin-bundle": "^3.33" & "php": "^7.0.8"...我想安装学说-mongodb-admin-bundle.when 我运行

我有这个错误

我要安装媒体包。要安装媒体包,我必须遵循依赖项。在安装媒体包之前,我必须已经安装了学说-mongodb-admin-bundle教程

我理解正确。我已经有了 学说-orm-admin。如果我想安装媒体包,我也必须安装 学说-mongodb -admin-bundle

0 投票
0 回答
916 浏览

mongodb - 更改 mongodb 超时值

我在 docker 容器中运行 mongodb,我想将超时值从 30 秒增加到 2 分钟,但我不知道在哪里更改。由于我的请求需要更多时间并导致以下错误:

我试图将值放在 config.yml 中,如下所示:

这可能是一个简单的问题,但我是 mongodb 和 docker 的新手,所以不知道在哪里更改它。

0 投票
2 回答
1373 浏览

symfony - 引用类“Doctrine\ODM\MongoDB\UnitOfWork”,但不存在此类服务

我目前正在使用带有 Doctrine MongoDB Bundle 的 Symfony 4,遵循此链接中的说明: DoctrineMongoDBBundle。所以,我有一个用户文档:

src/Document/UserDocument.php

src/Repository/UserRepository.php

src/Controller/Content.php

类内容扩展控制器

因此,在运行内容页面后,我收到以下错误:

无法自动装配服务“App\Repository\UserRepository”:方法“__construct()”的参数“$uow”引用类“Doctrine\ODM\MongoDB\UnitOfWork”,但不存在此类服务。

DocumentRepository 构造函数如下所示:

0 投票
1 回答
444 浏览

php - Doctrine MongoDB 如何将 PersistentArray 中的嵌入式文档作为其实际类而不是 Array

我的文档是一个ItemsList,有一个Items嵌入的文档。

问题是 Doctrine Mongo 没有将嵌入文档映射为 Item 对象,而是映射为数组。这个对吗?我将如何Item以 OOP 方式更新?

项目列表.php

项目.php

转储 $itemsList = $itemsListRepository->findBy([], null, 1);

0 投票
1 回答
923 浏览

php - 我不知道如何测试创建查询生成器

我正在尝试测试存储库的所有方法,但我不知道如何进行测试,我想使用 Profecy。我正在使用DoctrineMongoDBBundle

实体

存储库

这是我不知道如何基于存储库类执行的测试。

我不知道如何模拟方法“getQuery()”。总是出现此错误:错误:调用数组上的成员函数 getQuery()

0 投票
1 回答
2620 浏览

symfony4 - symfony4:没有扩展能够加载“doctrine_mongodb”的配置

我在使用 Symfony4.1 配置教义 odm 时遇到问题

我在作曲家更新时收到错误消息,缓存:清除子命令

没有扩展能够加载“doctrine_mongodb”的配置(在 /home/thomas/Documents/dev/blade/vm_api/config/packages/doctrine.yaml 中)。寻找命名空间“doctrine_mongodb”,找到“框架”

我的 composer.json 看起来不错

并且配置文件带有“正常”参数

我是 4.1 的新手,也许我做错了什么

提前致谢

0 投票
0 回答
125 浏览

php - 我应该如何预言排序方法?

我正在使用DoctrineMongoDBBundle,但我不确定如何预测排序方法。

资源

我的代码是:

UserRepository - 方法全部

UserRepositoryTest - 预言

错误总是这样

Prophecy\Exception\Doubler\MethodNotFoundException:方法Double\Doctrine\ORM\QueryBuilder\P2::sort()未定义。

我不明白如何测试 SORT,因为在 QueryBuilder 中找不到它。

0 投票
0 回答
528 浏览

php - Doctrine MongoDB - 使用 Doctrine MongoDB Aggregation Builder 在构面内水合结果

我有以下查询,我希望第一个结果是水合的。这是我尝试过的:

但是当我执行这个时,结果没有水合。下面是 Jobs 实体:

我也尝试过水合,$builder但它返回一个错误说Undefined index: _id。自己执行 'carpenterJobs' 查询,无需在水龙头内,我可以返回水合结果。