【发布时间】:2016-08-02 11:30:17
【问题描述】:
我在 MongoDB 中有以下查询
$this->createQueryBuilder()
->field('actor')->in($actorIdArray)
->getQuery()
->execute();
字段actor是带有注释的对象引用
@MongoDB\ReferenceOne(targetDocument="User", simple=true)
这意味着它将存储对象 ID 而不是完整引用。
当$actorIdArray是一个id数组时
["5706cb39821b166d3931f34f", "56015f7d4f8bd90b769e6e75"]
查询没有返回任何内容,这是预期的,因为归档的 actor 包含对象 id。
但是,如果我以这种方式构建数组
[new MongoId("5706cb39821b166d3931f34f"), new MongoId("56015f7d4f8bd90b769e6e75")]
它也不起作用,这让我很惊讶。
日志显示查询已完成
{ "actor": {"$in":[{"$id":"5706cb39821b166d3931f34f"},{"$id":"56015f7d4f8bd90b769e6e75"}]}}
我认为应该是这样的
{ "actor": {"$in":[ObjectId("5706cb39821b166d3931f34f"),ObjectId("56015f7d4f8bd90b769e6e75"]}}
不确定我是否做错了什么, 有什么想法吗?
【问题讨论】:
-
它必须是来自 ODM 的文档数组。
-
如果要避免对象加载,请使用参考doctrine-project.org/api/mongodb_odm/1.0/…
-
@Alsatian 如果我从控制台执行此查询 {"actor": {"$in":[ObjectId("5706cb39821b166d3931f34f"),ObjectId("56015f7d4f8bd90b769e6e75"]}} 则有效无需使用文档数组。
-
Doctrine 序列化你的数组。当您的数组包含文档时,它会将它们转换为 ObjectId(...)。请尝试一下。
-
无论如何我真的没有文档,所以如果我按照您的建议进行操作,我将需要对 $in 中的每个 id 进行一次查询(可能是数百个项目)。我只需要像在控制台中那样使用学说进行查询(仅使用 id)。希望你 @Alsatian 能帮我解决这个问题
标签: php mongodb symfony doctrine-orm doctrine