2013-11-27 1 views
0

У меня есть следующий объект:

{ 
    users: { 
     _id: "users", 
     entries: 
     [ 
      { 
       _id: 1, 
       username: "taxicala", 
       password: "password" 
      }, 
      { 
       _id: 2, 
       username: "guest", 
       password: "guest" 
      } 
     ] 
    } 
} 

И я хочу, чтобы выбрать только один пользователь, который находится в пределах массива «записей». Я пытаюсь следующее:

$entry = $this->_users->find(
      array('entries' => 
       array('$elemMatch' => 
        array('username' => 'taxicala') 
       ) 
      ) 
     ); 

В результате я получаю пустой объект:

{ } 

Я не мог найти ключ через Google или здесь об этом. Я делаю что-то неправильно? Я что-то упускаю? или «$ elemMatch» не поддерживается PHP?

Спасибо!

ответ

4

$ elemMatch поддерживается, но насколько вы документ, вы entries находятся у пользователя object. Поэтому, по крайней мере, в вашем запросе вы должны поставить array('users.entries' => ...). Также я не понимаю, зачем вам нужно использовать $ elemMatch.

db.coll.find({"users.entries.username" : "taxacala"}) выводит документы с именем пользователя "taxacala".

+0

Спасибо! Это сработало для меня, тем не менее, я понял, что неправильно форматировал свои данные, добавляя объект пользователей к коллекции пользователей. Это то, что вы получаете, когда вы новичок в чем-то: D. Но ответ, который вы мне дали, был правильным. – taxicala