2011-10-27 30 views
0

我無法檢索與MongoDB上的查詢匹配的所有文檔。我使用PHP。無法用查詢檢索所有Mongo文檔 - 僅返回一部分

下面是一個簡單的測試:

## Document 1 

{ 
    "_id": ObjectId("4ea80a1eb73e26ef1500cc9e"), 
    "search": { 
    "0": "clothing", 
    "1": "golden", 
    ....etc 

## Document 2 
{ 
    "_id": ObjectId("4ea81e78b73e26ef15339c65"), 
    "search": { 
    "0": "and", 
    "1": "belt", 
    "2": "brown", 
    "3": "golden", 
    ...etc 

## query 
$search = array('golden'); 
$products = Products::all(array('search'=>array('$in'=> $search))) // only document 1 is returned. 
//this is a quick test. in the end I'd like to have: 
$search = array('golden', 'belt'); //document 2 is returned 

文件從一個PHP數組創建,以「搜索」是字符串元素的排序和uniqued陣列: 排序($搜索); $ search = array_unique($ search);

$new->setProperty('search', $search); 

我是很新,蒙戈,但我不明白爲什麼,如果我的文檔的語法是不正確的,再一個就是返回而不是沒有。

謝謝。

回答

0

我不知道是什麼在PHP,但這個工程:

> db.items.find({}) 
{ "_id" : ObjectId("4ea98d0fa287fedc0281feee"), "name" : "first", "keywords" : [ "one", "two", "three", "four" ] } 
{ "_id" : ObjectId("4ea98d1aa287fedc0281feef"), "name" : "first", "keywords" : [ "two", "three", "four", "five" ] } 
{ "_id" : ObjectId("4ea98d23a287fedc0281fef0"), "name" : "first", "keywords" : [ "four", "five", "six" ] } 
{ "_id" : ObjectId("4ea99243a287fedc0281fef1"), "name" : "first", "keywords" : [ "five", "six" ] } 
{ "_id" : ObjectId("4ea99247a287fedc0281fef2"), "name" : "first", "keywords" : [ "five", "six", "seven" ] } 
{ "_id" : ObjectId("4ea99273a287fedc0281fef3"), "name" : "first", "keywords" : [ "one", "two", "seven" ] } 
{ "_id" : ObjectId("4ea9927aa287fedc0281fef4"), "name" : "first", "keywords" : [ "one", "two", "seven" ] } 
> db.items.find({$or:[{keywords:"four"},{keywords:"five"}]}) 
{ "_id" : ObjectId("4ea98d0fa287fedc0281feee"), "name" : "first", "keywords" : [ "one", "two", "three", "four" ] } 
{ "_id" : ObjectId("4ea98d1aa287fedc0281feef"), "name" : "first", "keywords" : [ "two", "three", "four", "five" ] } 
{ "_id" : ObjectId("4ea98d23a287fedc0281fef0"), "name" : "first", "keywords" : [ "four", "five", "six" ] } 
{ "_id" : ObjectId("4ea99243a287fedc0281fef1"), "name" : "first", "keywords" : [ "five", "six" ] } 
{ "_id" : ObjectId("4ea99247a287fedc0281fef2"), "name" : "first", "keywords" : [ "five", "six", "seven" ] } 
> db.items.find({keywords:{$in:["four","five"]}}) 
{ "_id" : ObjectId("4ea98d0fa287fedc0281feee"), "name" : "first", "keywords" : [ "one", "two", "three", "four" ] } 
{ "_id" : ObjectId("4ea98d1aa287fedc0281feef"), "name" : "first", "keywords" : [ "two", "three", "four", "five" ] } 
{ "_id" : ObjectId("4ea98d23a287fedc0281fef0"), "name" : "first", "keywords" : [ "four", "five", "six" ] } 
{ "_id" : ObjectId("4ea99243a287fedc0281fef1"), "name" : "first", "keywords" : [ "five", "six" ] } 
{ "_id" : ObjectId("4ea99247a287fedc0281fef2"), "name" : "first", "keywords" : [ "five", "six", "seven" ] } 
+0

試過這樣,仍然沒有運氣:$產品=產品::所有(陣列( '$或'=>陣列(陣列( '搜索'=> 「金」)))); - 只返回一些文檔,但不是文檔2. – koichirose

+0

如果我在shell或通過RockMongo等網絡管理員執行查詢,這也是一樣的 – koichirose