我想使用MongoDB / PHP从OR和AND模式中删除我的集合中的一些文档。
这是我的SQL查询:
DELETE FROM documents WHERE id_document = 13 AND(is_active = 1 OR is_pinned = 0)
似乎无法通过以下方式执行此操作:
你能帮忙吗? 谢谢:))$收藏 - >删除()
答案 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);
}
?>