在我的mongodb中,我有一个集合,其中id字段不是对象id
我不知道为什么它是这样构建的,我不能从零开始改变它,因为可能有很多软件已经在使用这种模式。
然而,这样的冰激凌文档看起来是这样的:

{
   "_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的“strategy”属性。

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

10-04 20:18