MongoDB / PHP - Удалить документы с шаблоном ИЛИ / И

1

Я хотел бы удалить некоторые документы из моей коллекции с помощью OR и AND с использованием MongoDB/PHP.

Вот мой SQL-запрос:

УДАЛИТЬ ОТ документов WHERE id_document = 13 AND (is_active = 1 OR is_pinned = 0)

Кажется невозможным сделать это с помощью:

$collection-> удалить()

Вы можете помочь? Спасибо :)

Теги:

1 ответ

0

Запрашиваемый запрос

var query = {
    "id_document": 13,
    "$or": [
        { "is_active": 1 },
        { "is_pinned": 0 }
    ]
}
db.collection.remove(query);

Вот несколько примеров тестовых документов для проверки этого в оболочке mongo:

db.test.insert([
    { _id: 1, id_document: 13,  "is_active": 1, "is_pinned": 0},
    { _id: 2, id_document: 13,  "is_active": 0, "is_pinned": 1 },
    { _id: 3, id_document: 13,  "is_active": 0, "is_pinned": 0 },    
    { _id: 4, id_document: 13,  "is_active": 1, "is_pinned": 1 }, 
    { _id: 5, id_document: 14,  "is_active": 1, "is_pinned": 1 }, 
    { _id: 6, id_document: 14,  "is_active": 1, "is_pinned": 0}
])

Я ожидал бы удаления запроса для удаления документов с помощью _ids 1,3 и 4, поэтому вывод для запроса

var query = {
    "id_document": 13,
    "$or": [
        { "is_active": 1 },
        { "is_pinned": 0 }
    ]
}
db.test.remove(query);
db.test.find();

было бы

/* 0 */
{
    "_id" : 2,
    "id_document" : 13,
    "is_active" : 0,
    "is_pinned" : 1
}

/* 1 */
{
    "_id" : 5,
    "id_document" : 14,
    "is_active" : 1,
    "is_pinned" : 1
}

/* 2 */
{
    "_id" : 6,
    "id_document" : 14,
    "is_active" : 1,
    "is_pinned" : 0
}

Этот пример PHP демонстрирует концепцию, выше которой используется оператор $or. $or принимает массив выражений, любой из которых может удовлетворить запрос выше:

<?php    

$db = $this->getMongoDbHandler();   

$collection = $db->selectCollection('myColl');

$query = array(
        'id_document' => 13,
        '$or' => array(
            array('is_active' => 1),
            array('is_pinned' => 0),
        )           
    ) ;

// Remove operation 
$collection->remove($query);

// Find remaining documents
$cursor = $collection->find();
foreach ($cursor as $doc) {
    var_dump($doc);
}
?>
  • 0
    Спасибо ! оно работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню