如何查找非特定类型的所有项目

时间:2015-06-24 07:22:08

标签: php mongodb mongodb-query

在我的收藏中,我需要删除任何非特定类型的项目。

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

如果我删除了元素周围的'$ not'包装器,它确实找到了所有类型为2和7的元素,我使用的不正确吗?

1 个答案:

答案 0 :(得分:0)

$and 运算符与 $not 表达式结合使用。以下mongo shell演示展示了如何测试应该使用的查询:

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 mongo查询:

$result = $db.test.find(
    array('$and' =>  array(
            array('_id' => array(
                array("$not" => array('$type' => 2))
            ),
            array('_id' => array(
                array("$not" => array('$type' => 7))
            )
        )
    )
);