Mongodb:选择集合中的嵌入文档

Mongodb:选择集合中的嵌入文档,mongodb,symfony,Mongodb,Symfony,我有一个像下面这样的收藏。嵌入式风格。问题是查询不会选择具有给定ID的预期用户。我做错了什么?还有更好的办法吗 注意:如果我从查询中删除user位,它将返回所有具有预期状态的记录,因此查询本身是正常的 提前谢谢 $query = $dm ->createQueryBuilder('EmMaBundle:Design') ->field('user.id')->equals('53d62b692ac1fb22d9000000')

我有一个像下面这样的收藏。嵌入式风格。问题是查询不会选择具有给定
ID
的预期
用户。我做错了什么?还有更好的办法吗

注意:如果我从查询中删除
user
位,它将返回所有具有预期
状态的记录
,因此查询本身是正常的

提前谢谢

    $query = $dm
        ->createQueryBuilder('EmMaBundle:Design')
        ->field('user.id')->equals('53d62b692ac1fb22d9000000')
        ->field('status')->equals(0);

嘿,那里, 尝试使用user.\u id而不是选择器中的user.id。

1)您应该查询
用户。$id

2)
user.$id
字段包含
ObjectId
而不是
字符串。用
MongoId
试试,例如

$userId = new \MongoId("53d62b692ac1fb22d9000000");

$query = $dm
    ->createQueryBuilder('EmMaBundle:Design')
    ->field('user.$id')->equals($userId)
    ->field('status')->equals(0);

shell查询:

db.collection.find( { 'user.$id': ObjectId("53d62b692ac1fb22d9000000") } )

我尝试了
'user.id'
'user.\u id'
'user.$id'
新的\MongoId(“53d62b692ac1fb22d9000000”)
版本,但都没有成功。我刚才添加到答案中的mongo shell查询是否会为您返回任何结果?shell查询也不起作用。显然,查询嵌入式文档无论如何都是一个痛苦的过程,因此我决定现在也将
user.id
直接作为
userId
字段保存到文档中,这样我就可以直接查询它了。这就解决了目前的问题。我也读过
$elemMatch
。嗯,奇怪!很抱歉,我帮不了你什么忙。我只是擦了擦数据库,然后再试一次。现在它起作用了。我不明白为什么。我以前遇到过一些更奇怪的问题,所以我想我应该开始研究不同的NoSQL。
db.collection.find( { 'user.$id': ObjectId("53d62b692ac1fb22d9000000") } )