2015-06-24 3 views
1

В моей коллекции мне нужно удалить любые элементы, которые не относятся к определенному типу.Как найти все элементы, которые не являются определенным типом

$result = $db.configs.find(
      array('$not' => array(
        array('$or' => array(
          array('_id' => array('$type' => 2)), 
          array('_id' => array('$type' => 7)), 
         ) 
        ) 
       ) 
      ) 
     ); 

Если я удалить «$» не обертку вокруг элемента, это найти все элементы, которые имеют тип 2 и 7, я использую не неправильно?

+0

Какие коллекции? Может быть полезно использовать функцию array_filter()? – Luke

+0

коллекция называется «configs», не совсем уверен, что это важно для вопроса? @Luke –

+1

Это зависит от типа вашего '_id'. Если это 'objectId', запрос будет возвращать пустой курсор, поскольку вы фильтруете' 7' и '2', которые являются' objectId' и 'string' соответственно. Также будет лучше, если вы предоставите образец документа? – Vishwas

ответ

0

Используйте оператор $and с комбинацией $not выражений. Следующая демонстрация Монго оболочки показывает, как вы можете проверить запрос, который вы должны использовать:

use test 
db.test.insert([ 
    {"_id": 1, a: 1}, 
    {"_id": new Date(), a: 2 }, 
    {"_id": "foo", a: 3}, 
    {"_id": ObjectId("5579621f3cab061ff5c618c7"), a: 4}  
]) 

db.test.find({ 
    "$and":[ 
     { "_id": { "$not": { "$type": 7 } } }, 
     { "_id": { "$not": { "$type": 2 } } } 
    ] 
}) 

Результат

/* 0 */ 
{ 
    "_id" : 1, 
    "a" : 1 
} 

/* 1 */ 
{ 
    "_id" : ISODate("2015-06-24T09:59:54.230Z"), 
    "a" : 2 
} 

Эквивалент PHP Монго запроса:

$result = $db.test.find(
    array('$and' => array(
      array('_id' => array(
       array("$not" => array('$type' => 2)) 
      ), 
      array('_id' => array(
       array("$not" => array('$type' => 7)) 
      ) 
     ) 
    ) 
); 
Смежные вопросы