gpt4 book ai didi

php - doctrine odm,查找 id 不是对象 id 的文档

转载 作者:可可西里 更新时间:2023-11-01 09:19:24 26 4
gpt4 key购买 nike

在我的 mongodb 中,我有一个集合,其中的 id-field 不是一个 object-Id我不知道为什么它是这样构建的,我不能从头开始更改它,因为可能有很多软件已经在使用这种模式。

但是,这样的 Icecream 文档是这样的:

{
"_id": "52d0283ae4b01db941dd763b",
"insertDate": ISODate("2014-01-10T17:04:58.617Z"),
"language": "en",
"profile": ObjectId("50e577602b5e05e74b38a6c8"),
"related": ObjectId("516c0061975a299edc44b419"),
"survey": ObjectId("516c0061975a299edc44b409"),
"version": NumberInt(0)
}

使用 mongoshell 我可以找到它:

 db.icecream.find({"_id":"52d0283ae4b01db941dd763b"})

而不是使用:

 db.icecream.find({"_id":ObjectId("52d0283ae4b01db941dd763b")})

所以我尝试了很多查询来找到它,但是 doctrine odm 总是没有正确的查询,这是我最近的尝试:

  return $this->mongo->getManager()
->getRepository('DocumentBundle:Icecream')
->findOneBy(array('_id' => (string)$answerId));

返回

   doctrine.INFO: MongoDB query: {"find":true,"query":{"_id":{"$id":"52ced410e4b0fcc3da3a0c8b"}},"fields":[],"db":"myIcecreamDb","collection":"icecream"} [] []

有人知道吗?

最佳答案

如果您有自己的字符串 _id(非 MongoId 对象),您可能希望使用 Id 的“策略”属性。

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/** @ODM\Document */
class MyPersistentClass
{
/** @ODM\Id(strategy="NONE") */
private $id;

public function setId($id) {
$this->id = $id;
}
}

您可以在此处的文档中看到更多选项: http://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/basic-mapping.html#basic-mapping-identifiers

关于php - doctrine odm,查找 id 不是对象 id 的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com