Php 条件为“不显示”的MongoDB请求

Php 条件为“不显示”的MongoDB请求,php,mongodb,Php,Mongodb,我想得到所有类型的经典书籍,但不包括类型幻想和历史 "bookName": "I've been discovered", "bookGenre": { "0": "Classics", "1": "Fantasy", "2": "Romance" } "bookName": "Doctor Who", "bookGenre": { "0": "Classics", "1": "Biography" }

我想得到所有类型的经典书籍,但不包括类型幻想和历史

"bookName": "I've been discovered",
    "bookGenre": {
         "0": "Classics",
         "1": "Fantasy",
         "2": "Romance"
    }

"bookName": "Doctor Who",
"bookGenre": {
     "0": "Classics",
     "1": "Biography"
}

"bookName": "I don't want to tread carefully",
"bookGenre": {
     "0": "Classics",
     "1": "Fantasy",
     "2": "History"
}
在这个查询中,我得到了我所有的书,唯一的例外是没有带来类型幻想和历史不起作用。
如何向被排除的流派作品发出请求?

嗯,您的数组有一个基本问题:

$genre = array("Classics");
$genreNot = array("Fantasy", "History");

$q = find(array("bookGenre" => array('$in' => $genre), "bookGenre" => array('$nin' => $genreNot)));
对于同一个对象,您有重复的键,因此实际上此查询中唯一经过的子句是
“bookgreen”=>数组('$nin'=>$genreNot)
。我相信您可以将
$in
$nin
组合起来:

$q = find(array("bookGenre" => array('$in' => $genre), 
"bookGenre" => array('$nin' => $genreNot)));

就像这样。

OMG,一个基本的检查请求。谢谢,我会小心的。
$q = find(array(
             "bookGenre" => array('$in' => $genre, '$nin' => $genreNot)
));