问题标签 [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 投票
2 回答
480 浏览

php - Zend Framework 2 Doctrine MongoDB ODM 和 Apache 太慢了

我们在运行时遇到了奇怪的性能问题:

我们确定这不是数据库问题(用真正的 MongoDB 实例尝试过,结果仍然相同)。


设想

我们以类似于以下的方式定义了与 Doctrine ODM 一起使用的对象:

我们使用这些来导入大约。100 个产品进入产品数据库。这一切在真机上大约需要 5 秒,但在虚拟机上尝试时,大约需要。25秒做同样的事情。

看起来问题可能是Apache在处理这一切的过程中占用了99% 的负载,但我很难确定到底发生了什么。

任何形式的建议将不胜感激......


更新

这似乎只在写入数据时发生。读取数据似乎没问题。

Webgrind 数据(截图)可用:https ://www.dropbox.com/s/jjlg7ano6epy6t1/webgrind.png?dl=0

0 投票
1 回答
1966 浏览

php - 如何让自定义用户提供程序在 Silex 中工作?

我真的可以用第二双眼睛。我正在尝试使用 Silex 的SecurityServiceProvider和 Doctrine MongoDB ODM 创建自定义用户提供程序,并且在尝试登录时不断收到以下错误:

注意:如果我对用户进行硬编码,它可以完美运行

据我所知,我遵循了 Silex 文档,可以在此处找到。我验证它已成功从数据库中获取用户,所以我知道这不是问题。下面是相关代码,包括来自 app.php 的片段、用户类和我的自定义用户提供程序类。



0 投票
1 回答
789 浏览

php - 有效检查文档是否有孩子

我正在尝试使用 Doctrine MongoDB 构建一个延迟加载树。我的文档结构如下:

以下代码将检索给定页面的所有子项:

这按预期工作,但将为每个子页面执行单独的查询以检查它是否是叶子。在处理具有大量子节点的大树时,效率将不高。

我可以在我的页面文档中引入一个布尔值isLeaf并在持久化时更新它。但这也意味着我必须在添加或删除孩子时更新父母。

你有任何解决这个问题的建议吗?

0 投票
1 回答
539 浏览

php - 无法随时获取引用的实体属性,只能在渲染方法中

我的问题是当我调用引用实体$entity->getEntity2()时,它返回entity2但带有public $__isInitialized__ => bool(false). 然后当我尝试调用$entity->getEntity2()->getId()它时Doctrine\ODM\MongoDB\DocumentNotFoundException The "Proxies\__CG__\Doctrine\Documents\Entities\Entity2" document with identifier "54de5341642c8769150041a7" could not be found.

奇怪的是,当我在框架中渲染之前调用它时会发生这种情况。当我在渲染方法中执行相同操作时,它可以工作,但例如在表单提交处理方法中它不起作用......

我已经清理了缓存、代理和水合器。带有这个的文档ObjectID在我的数据库中,它被返回,只是没有初始化,除了渲染方法之外,不能得到它的任何属性

这是通过调用getEntity2()(mind $__isInititalized = false)返回的

类 Proxies__CG__\Doctrine\Documents\Entities\Entity2#178 (6) { public $ initializer=> class Closure#160 (3) { public $static => array(2) { 'documentPersister' => class Doctrine\ODM\MongoDB\Persisters\DocumentPersister#166 (11) { ... } 'reflectionId' => class ReflectionProperty#165 (2) { ... } } public $this => class Doctrine\ODM\MongoDB\Proxy\ProxyFactory#78 (7) { private $metadataFactory => class Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory# 74 (9) { ... } private $uow => class Doctrine\ODM\MongoDB\UnitOfWork#76 (23) { ... } private $proxyNamespace => string(7) "Proxies" private $proxyGenerator => class Doctrine\Common\Proxy\ProxyGenerator#79 (4) { ... } private $autoGenerate => int(1) private $definitions => array(1) { ... } private $metadataFactory => class Doctrine\ODM\ MongoDB\Mapping\ClassMetadataFactory#74 (9) { ...} } public $parameter => array(1) { '$proxy' => string(10) "" } } public $克隆人=> class Closure#170 (3) { public $static => array(3) { 'documentPersister' => class Doctrine\ODM\MongoDB\Persisters\DocumentPersister#166 (11) { ... } 'classMetadata' => class Doctrine\ODM\MongoDB\Mapping\ClassMetadata#155 (38) { ... } 'reflectionId' => class ReflectionProperty#165 (2) { ... } } public $this => class Doctrine\ODM\MongoDB\ Proxy\ProxyFactory#78 (7) { private $metadataFactory => class Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory#74 (9) { ... } private $uow => class Doctrine\ODM\MongoDB\UnitOfWork#76 ( 23) { ... } private $proxyNamespace => string(7) "Proxies" private $proxyGenerator => class Doctrine\Common\Proxy\ProxyGenerator#79 (4) { ... } private $autoGenerate => int(1 ) 私有 $definitions => 数组(1) { ...} private $metadataFactory => class Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory#74 (9) { ... } } public $parameter => array(1) { '$proxy' => string(10) "" } } 公共 $isInitialized => bool(false) protected $_id => NULL protected $label => NULL protected $id => string(24) "54de5341642c8769150041a7" }

0 投票
2 回答
1065 浏览

php - Symfony2 MongoDB 多连接错误

我在 Symfony2 中设置 MongoDB 时遇到问题。

眼镜:

我在 MongoDB 中的 2 个不同的包 nxtlog 和 nxtsurvey 中使用了 2 个数据库。我最初遇到的问题是我在选项中添加的数据库名称没有被考虑在内,这导致使用数据库“默认”,这当然不存在。我也不想添加 default_connection 和 default_manager,甚至也不想添加 default_database,因为这两个连接都在非核心包中使用。

==== 尝试 #1 ====

这是我原来的配置:

为了使它工作,我在每个文档注释中添加了数据库的名称:

这是一个临时解决方案,但由于我的计划是在我的其他项目中重用捆绑包,我不想浏览所有文档并设置数据库的名称。

==== 尝试 #2 ====

我的第二次尝试是严格遵循文档,因此我尝试了以下方法:

并得到以下错误:

所以我发现连接和数据管理器不能有不同的名称。我不相信,所以我google了一下,有人有类似的问题,答案是在doctrine_mongodb下添加以下内容:

但是这个解决方案对我不起作用,经过更多谷歌搜索后,我发现编写捆绑包(或部分捆绑包)的人 jmikola 犯了一个错误,他说他修复了它,并且 default_commit_options 不应该是所需的配置选项。(参考https://github.com/doctrine/DoctrineMongoDBBundle/issues/222

在这一点上,我需要一些帮助,因为这需要太多时间来解决。

谢谢

0 投票
2 回答
646 浏览

mongodb - DoctrineMongoDBBundle:指定文档管理器的读取首选项

我正在连接到仅配置为读取的远程数据库。如果我使用:

它工作正常,但如果我尝试:

我收到此错误:

不是主从Ok=false

如何指定 $dm 的读取首选项,与 MongoClient 的工作方式相同?

提前致谢...

0 投票
0 回答
94 浏览

php - 使用 DoctrineMongoDB 持久化嵌入文档时出错:给定数组

我正在使用 Doctrine-MongoDB 和 Symfony 开发一个项目。

我已经将一个文档嵌入到另一个使用\@EmbedMany注释中。

以下是文件:

音乐信息:

和嵌入的文档:

之后,我创建了一个表格来填写这些文件:

控制器

但是当我尝试这个时,我总是得到这个异常: 警告:spl_object_hash() 期望参数 1 是对象,给定数组

我不知道为什么...

谢谢你的帮助 !

0 投票
0 回答
674 浏览

mongodb - 如何正确处理 Doctrine MongoDB ODM 中的非规范化数据同步

使用 MongoDB 时,引用数据的非规范化似乎是一种很常见的做法。然而,我没有看到任何使用 Doctrine MongoDB ODM 处理该问题的内置方法。

假设我有一个用户可以互相关注的社交网络,这里有两个示例用户:

如您所见,我希望对“名称”属性进行非规范化。正如我所说,Doctrine ODM 中似乎没有内置方法可以做到这一点。由于该主题的最新一期已有一年之久,因此我会尝试自己做。

虽然我在互联网上找到了大量文章,解释在什么情况下非规范化是有用的,并提到保持非规范化数据一致是多么痛苦,但我没有找到一篇解释如何实现非规范化数据更新过程的文章。

在我的情况下,最终一致的数据就足够了,用户名的更新和非规范化数据的更新之间可能有几个小时。我可以看到 3 种不同的方法:

1 - 一致性检查器: 在后台运行定期更新非规范化数据的任务。

2 - 更新触发器: 名称字段的每次更新都会在一次刷新中更新所有关联的非规范化数据。

3 - 混合解决方案 对于每个用户,当更新名称时,将使用更新信息将条目添加到队列中(用户更新和队列中的插入将在一次刷新中进行),并有一个任务在后台进行实际更新。

第一个解决方案似乎是最容易实现的,但我认为它可能非常消耗资源。第二种解决方案会使更新请求长得离谱,即使读/写比率很高,这可能是个问题。我认为第三种解决方案是要走的路,我这样想对吗?

我也想以 DRY 的方式来做,例如,我不想在 preUpdate 回调中为每个数据非规范化的 Document 重写相同的代码。我正在考虑制作自定义注释,这是个好主意吗?

0 投票
2 回答
969 浏览

symfony - 如何使用 Silex 和 Doctrine MongoDB ODM 应用唯一验证器约束?

我正在使用 Silex,并希望对 MongoDB 文档应用唯一性验证器约束。

要在 中找到的UniqueEntity验证器约束symfony/doctrine-bridge并非旨在与 ORM 一起使用,doctrine/mongodb-odm而是仅与 ORM 一起使用,因为在中定义的服务Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntitydoctrine.orm.validator.unique.

然而,在 Symfony 中,有一个Unique约束验证器doctrine/mongodb-odm-bundle可用于此目的。

我必须移植捆绑包的代码吗?任何解决方法?

0 投票
1 回答
568 浏览

php - 无法在 Connection.php Symfony 2 中找到 Mongo 类

这是一个经常发生的错误,但是由于我尝试了很多东西来修复它,所以我有点脱离了这个想法。

我有一个带有 mongo DB 的 symfony 2。我已经设置了我的 composer.json 文件来下载学说-mongo 和学说-mongo-bundle,

为了下载这 2 个模块,我需要将 mongo 扩展安装到 PHP 中。我通过 brew 安装了它们,mongo 和 mongodb

我相信我也允许 mongo 扩展,因为当我写的时候

我得到这个结果

你可以在那里看到mongo。

此外 php -i 返回启用 mongo 的信息。

但是当我试图在我的项目中点击 app_dev.php 文件时,我仍然得到这个:

Connection.php 第 284 行中的 ClassNotFoundException:尝试从全局命名空间加载类“Mongo”。您是否忘记了“使用”声明?

我正在使用 Mac OS X 并打开 chmod 777

递归地。

你知道什么会触发这个吗?谢谢你。