首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >findBy参考原则-mongodb

findBy参考原则-mongodb
EN

Stack Overflow用户
提问于 2012-10-27 00:14:35
回答 3查看 6.2K关注 0票数 1

我有用户和帖子的集合。

用户看起来像

代码语言:javascript
复制
{ "_id" : ObjectId("5089cc4c7b03b9902b000000"), "facebook_id" : "522128874" }

帖子看起来像

代码语言:javascript
复制
{ "_id" : ObjectId("508aa21b7b03b9780800000f"), "facebook_id" : "10150709375878875", "user" : DBRef("User", ObjectId("5089cc4c7b03b9902b000000")), "message" : " Julia dream, dreamboat queen, queen of all my dreams", "updated_time" : 1333502938 }

我想找到一个特定用户的所有帖子。

代码语言:javascript
复制
$user = $userRepo->findOneByFacebookId('522128874');
$posts = $postRepo->findOneByUser($user)

它不起作用。我也试过

代码语言:javascript
复制
$posts = $postRepo->findOneBy(array('user' => $user))

代码语言:javascript
复制
$posts = $postRepo->findOneBy(array('user' => $user->getId()))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-29 20:09:26

如果您正确地映射了文档关系,那么您需要做的只是

代码语言:javascript
复制
$user = $userRepo->findOneByFacebookId($fbid);
$posts = $user->getPosts();

您可能想看看Bidirectional References Doctrine Documentation

如果希望手动查找用户的帖子(更繁琐的方式),则必须在帖子存储库中创建名为findOneByUser($user)的方法。然后,您必须将用户ID转换为MongoId,然后使用querybuilder将user.$id字段与将返回MongoId的querybuilder相匹配。

请记住,当您创建一个引用另一个文档的文档(在本例中为post)时,它通过其MongoId存储引用,因此您不能简单地执行findOneByUser($user),除非您自己创建了此方法。

票数 2
EN

Stack Overflow用户

发布于 2013-05-08 13:18:52

Bam!

代码语言:javascript
复制
$posts = $postRepo->findOneBy(array('user.id' => $user->getId()))

试试看,对我很有效。你必须查询所有的元素,这看起来有点愚蠢。

票数 6
EN

Stack Overflow用户

发布于 2015-10-09 21:05:20

对于@ReferenceOne这样的https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html,必须使用查询构建器的references()方法

代码语言:javascript
复制
$qb = $postRepo->createQueryBuilder('u')
               ->field('user')->references($user);

引用PS:使用includesReferenceTo() a@

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13090612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档