- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有以下文件:
用户
文档。网站
文档每个用户都有一个嵌入文档数组,每个文档代表他关注的一个项目 - 一个网站,一个推特帐户 - 可以选择标记他感兴趣的特定类别。每个嵌入文档都有对第三个文档的引用 - Site
文档(或 Twitter
文档等)。
问题是 - 使用 MongoDB ODM,如何使用该站点的 id 获取选择关注给定站点的所有用户的文档?
(见下文(在文件之后)如何在 mongodb shell 中完成)
User.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\Document
*/
class User {
/**
* @ODM\Id
* @var string
*/
protected $id;
/**
* @ODM\EmbedMany(
* discriminatorMap={
* "site"="SiteFollow",
* "twitter"="TwitterFollow",
* }
* )
* @var ArrayCollection;
*/
protected $follows;
}
SiteFollow.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\EmbeddedDocument
*/
class SiteFollow {
/**
* @ODM\Collection
* @var array
*/
protected $interestingCategories;
/**
* @ODM\ReferenceOne(targetDocument="Site", simple=true)
* @var Site
*/
protected $siteItem;
}
Site.php
<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\Document
*/
class Site {
/**
* @ODM\Id
* @var string
*/
protected $id;
/**
* @ODM\String
* @var string
*/
protected $name;
/**
* @ODM\String
* @var string
*/
protected $url;
}
mongo shell 中的用户文档示例:
db.User.findOne()
{
"_id": ObjectId("123"),
"follows": [
{
"interestingCategories": [
"PHP"
]
"siteItem" : ObjectId("OBJECT_ID_OF_SITE_DOCUMENT"),
"_doctrine_class_name" : "site"
}
]
}
用于获取所有关注特定站点的用户的 Mongo shell 命令:
db.User.find({"follows.siteItem": ObjectId("OBJECT_ID_OF_SITE_DOCUMENT")})
最佳答案
我发现 answer provided by Madarco有时不能正常工作。如果您正在查询嵌入文档中引用字段的 $id
字段,您可能需要将 MongoId
对象传递给 equals()
方法.所以在这种情况下,它将是:
$repo = $odm->getRepository('User');
$repo->createQueryBuilder()
->field('follows.siteItem.$id')
->equals(new \MongoId($siteId))
->getQuery()
->execute();
关于php - 使用 Doctrine 的 MongoDB ODM - 如何通过嵌入文档的字段查找文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247938/
我需要 MongoDB 中的自动递增字段。我找到了 documentation on how to use a counter-collection in MongoDB . 但是,我的值 id 不是
我需要 MongoDB 中的自动递增字段。我找到了 documentation on how to use a counter-collection in MongoDB . 但是,我的值 id 不是
我在 ZF2 + Doctrine ODM + doctrine-mongodb-odm-module 上有应用,但找不到如何使用这些模块创建分页的示例。有没有这样的例子? 最佳答案 试试看这里Doc
我正在尝试通过特殊验证事件来验证数据完整性。我的 Phalcon\Mvc\Collection 模型使用一些 Phalcon\Mvc\Model\Validator 验证器实现了validation(
我有一个已经变成表格的 Doctrine mongodb 文档。该文档有两个 emebedOne 文档,它们也在表单中。正在验证主文档,但未验证嵌入文档。我正在使用自定义断言,但我认为这并不重要。 文
我目前正在处理嵌入文档,我需要从父文档中获取帐户信息以生成 URL。如何从嵌入文档的 getter 访问父文档? /** @文档 */ 类用户 { //... /** @EmbedOne(target
我想在我的项目中使用 doctrine ODM,我想为我的每个客户建立一个单独的数据库。我希望能够通过我的 API 在运行时管理客户端。我现在的问题是: 当我设置 doctrine ODM 时,我必须
我们正在使用 Symfony2/DoctrineOdm/MongoDB,当我们这样做时: if ($doc.referenceOne != null) { ... } 和 $doc.reference
我遇到以下问题:使用 distinct 时无法限制结果数。例子: $stores = $this->dm->createQueryBuilder('Application\Document\Item'
我开始编写 Doctrine 2 Mongo ODM 单元测试,但意识到我的代码中没有好的策略来执行此操作。我想运行测试并实际保留对象,但我希望允许在拆解中轻松删除我的测试数据。集合和数据库名称必须根
我想知道是否可以在 phalcon ODM 中进行批量删除(使用单个操作),而不是通过“delete()”方法获取文档并在循环中一个一个地删除它们? 我需要这样的东西: $db->users->rem
我已经按照 中的描述设置了一个类 http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/geospatial-querie
这可能是一个愚蠢的问题,但我正在努力在 mongoDB 文档中保存一个大数字。 基本上,我想保存一个可以大于 max int 值的数字。因此,我将我的文档字段声明为 @Field(type="floa
我一直在尝试减少 Web API 上的数据库查询数量。我的数据库有 3 个集合:playground、widget、token 一个 Playground 有很多小部件,一个小部件有一个 token
我一直收到这个错误: PHP Fatal error: Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' wit
我正在 koajs 中构建一个样板应用程序供以后使用。我无法决定是否应该使用 ODM。我可以使用 ES6 类定义我的模式,即使我使用像 mongoose 这样的东西,我也可能最终会编写大量自定义验证器
继续我关于 EAV 的问题,我正在考虑使用MongoDB来存储产品属性。 我将使用 MongoDB(或其他文档数据库)存储此应用程序的目录部分 - 类别、产品及其所有相关信息。 我的问题是,当使用 O
我将如何在学说 odm 中模拟 SQL 中的 like 运算符? 用例:我想在变量 $search 的字段标题字符串中找到一个主题。 查询会是什么样子? 感谢所有回答 最佳答案 使用 MongoReg
我有一个关于(顺便说一句真的很棒!)Doctrine ODM 的简单问题。 假设您有这样的文档: /** * @Document */ class Test { /** @Id */
我想知道是否有相当于 MySQL-Query 的: SELECT COUNT(*) FROM users 在 MongoDB ODM 中? 这可能有效: $qb = $this->dm->cre
我是一名优秀的程序员,十分优秀!