у меня есть такой объект:
$testData = array(
'name' => 'joyCood',
'nick' => 'hello',
'friends' => array(
array('friend_id' => 98, 'readable' => 8),
array('friend_id' => 97, 'readable' => 0),
array('friend_id' => 96, 'readable' => 0)
)
);
мой запрос sql:
$macher = array('friends.friend_id' => 98, 'friends.readable' => 0);
$mongo->find($macher);
результат:
$testData = array(
'name' => 'joyCood',
'nick' => 'hello',
'friends' => array(
array('friend_id' => 98, 'readable' => 8),
array('friend_id' => 97, 'readable' => 0),
array('friend_id' => 96, 'readable' => 0)
)
);
проблема в том, что читаемое значение не равно eq 0, почему mongodb возвращает мне этот объект? правильный результат будет возвращен ничего не будет хорошо. Помоги мне, пожалуйста!
Я вижу это сейчас. Проблема здесь в том, что условия, перечисленные вами, рассматриваются все члены массива, а не только отдельный. Для этого вам нужно $elemMatch
:
$macher = array( 'friends' => array( '$elemMatch' => array(
'friend_id' => 98, 'readable' => 0
)));
При этом каждый элемент имеет одинаковые условия запроса. В противном случае на самом деле в массиве есть элементы, которые соответствуют каждому условию, и соответствие true
,
По сути, это «маленький запрос», который применяется к каждому элементу массива, чтобы проверить, выполняются ли оба условия.
Других решений пока нет …