Я хотел бы удалить некоторые документы из моей коллекции с помощью OR и AND с использованием MongoDB/PHP.
Вот мой SQL-запрос:
УДАЛИТЬ ОТ документов WHERE id_document = 13 AND (is_active = 1 OR is_pinned = 0)
Кажется невозможным сделать это с помощью:
$collection-> удалить()
Вы можете помочь? Спасибо :)
Запрашиваемый запрос
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);
}
?>