MongoDB / PHP - 使用OR / AND模式删除文档

时间:2016-01-20 10:44:45

标签: php mongodb

我想使用MongoDB / PHP从OR和AND模式中删除我的集合中的一些文档。

这是我的SQL查询:

  

DELETE FROM documents WHERE id_document = 13 AND(is_active = 1 OR   is_pinned = 0)

似乎无法通过以下方式执行此操作:

  

$收藏 - >删除()

你能帮忙吗? 谢谢:))

1 个答案:

答案 0 :(得分:0)

您所追求的查询是

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

以下是一些在mongo shell中测试它的示例测试文档:

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);
}
?>