2013-11-11 4 views
1

Collection содержит данные, как этот

{ 
     '_id': ObjectId("527cf8ae3ad5a461caf925fc"), 
     'name': { 
      'first': 'John', 
      'last': 'Backus' 
     } 
    } 

Я хочу найти запись, в которой первое имя «Джон» через $, где

$m = new MongoClient(); 
    $db = $m->selectDB('school'); 
    $collection = new MongoCollection($db, 'student'); 
    $js = "function() { 
     return this.first.name == 'John'; 
    }"; 
    $cursor = $collection->find(array('$where' => $js)); 

Я получаю исключение Поймали Исключение: localhost: 27017: TypeError: Невозможно прочитать свойство 'first' of undefined near 'this.name.first ==' Jo '

Я хотел бы искать только с $ where.

+0

http://docs.mongodb.org/manual/reference/operator/query/where/ –

+0

@NanheKumar я уже читал эту ссылку, но здесь не пример, как это –

+0

Почему вы хотите использовать $ where в этом сценарии? –

ответ

0

Это действительно странный сценарий. Зачем это делать, если вы можете найти его с

db.collection.find({'name.first' : 'John'}) 

Во всяком случае, ошибка в first.name и ваша коллекция имеет схему name.first

$js = "function() { 
    return this.name.first == 'John'; 
}"; 

В основном он пытается вам сказать, что «я я смотрю на имя поля, и он не определен, а затем, когда я проверяю поле сначала этого неопределенного, я разбился ».

+0

@ Салвандор это возможно или нет через $, потому что я знаю, как найти другой подход к использованию –

+0

Не достал тебя. Я просто показал вам, где была ваша ошибка, и показал вам, как это исправить. –

+0

Я уже упоминал полный код, как исправить исключение –

0

Это работает для меня:

$m = new MongoClient(); 
    $db = $m->school; 
    $collection = $db->student; 
    $cursor = $collection->find(array('name.first' => 'John')); 

    foreach ($cursor as $document) { 
     var_dump($document); 
    } 
Смежные вопросы