我有一个像这样的对象:
$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会将此对象返回给我?正确的结果将是返回一切都没关系。请帮帮我!
答案 0 :(得分:0)
我现在看到了。这里的问题是,列出它们的条件在所有数组成员中被考虑,而不仅仅是单个成员。为此,您需要$elemMatch
:
$macher = array( 'friends' => array( '$elemMatch' => array(
'friend_id' => 98, 'readable' => 0
)));
这会考虑每个元素都具有"相同的"查询条件。否则实际上有元素"某处"在匹配每个条件的数组中,匹配为true
。
基本上是一个"小查询"应用于数组的每个元素以查看两个条件是否都为真。