Текущий код:
$doc = array('ooxx' => array(1,2,3,4,5));
datamodel()->insert($doc);
$doc2 = array('ooxx' => array(6,7,8,9));
datamodel()->insert($doc2);
$macher = array('ooxx'=>array('$exists' => true), 'ooxx' => array('$nin'=>array(6)));
$res = datamodel()->findOne($macher);
print_r($res);
Когда я заменяю $macher
на нижний, он работает хорошо, почему? это ошибка mongodb?
$macher = array( 'ooxx' => array('$nin'=>array(6)), 'ooxx'=>array('$exists' => true));
0
hang
15 Авг 2014 в 10:54
$ nin работает на php. Вы видели какие-либо ошибки, возвращаемые запросом? Зарегистрируйте результат запроса и посмотрите.
– astroanu
15 Авг 2014 в 11:00
1 ответ
Лучший ответ
Это не работает, потому что ключи имеют одно и то же имя, и один перезаписывает другой. Значит, «ключи» должны быть уникальными.
Если у вас есть два условия для одного и того же ключа, вы используете $and
, который принимает массив аргументов:
$matcher = array(
'$and' => array(
array( 'ooxx' => array( '$nin' => array(6) ) ),
array( 'ooxx' => array( '$exists' => true ) )
)
)
Или для тех, кто настроен на JSON:
{
"$and": [
{ "ooxx": { "$nin": [6] } },
{ "ooxx": { "$exists": true } }
]
}
Это действительная структура, а то, что вы пишете, - нет.
1
Neil Lunn
15 Авг 2014 в 11:02
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.