2011-08-23 74 views
1

工作不適合我,我跑了mongodump然後mongorestore到MongoDB數據庫從一臺計算機移動到另一個。數據在那裏,我可以查詢它們(第一個查詢)並獲得結果,但在查詢中使用$或不會產生結果(第二個查詢)。

db.employees.find({ 'name.first' : 'Joe' }) 
-- vs -- 
db.employees.find({ $or : [ { 'name.first' : 'Joe' }]}) 

據我所知,索引已從system.indexes.bson重新創建,任何想法是什麼錯?

指標:

> db.employees.getIndexes() 
[ 
    { 
     "name" : "_id_", 
     "ns" : "data.demployees", 
     "key" : { 
      "_id" : 1 
     } 
    } 
] 
  • 原始服務器:MongoDB的1.6.5 64B
  • 新服務器:MongoDB的1.4.4 32B

我是通過控制檯運行查詢,不pymongo。

+0

您是否收到錯誤,或者只是沒有結果?你從第一個查詢中得到了什麼結果?兩個查詢都可以在mongo shell中工作嗎?使用相同的pymongo和mongodb版本? – dcrosta

+1

如果您在原始的mongodumped數據庫上運行第二個查詢,是否會得到任何結果? –

+0

是的,運行第一個查詢給我結果,運行第二個查詢給我沒有結果並且沒有錯誤消息。 – Radek

回答

4

真正幫助在這裏,我們需要的一些信息:

  • 版本號(的MongoDB和pymongo,服務器和新的計算機)
  • 輸出db.employees.getIndexes()
  • 你能在運行測試一個較小的數據集? (見下)
  • 你可以仔細檢查數據類型嗎?

較小的數據集

嘗試複製出一小部分的employees到一個新的集合,並運行相同的查詢:

db.employees.find().limit(100).forEach(function(x) { db.employees_test.insert(x); }) 

基本上,讓我們試着排除腐敗數據。然後讓我們嘗試隔離版本,看看這是否是一個已知的錯誤。

仔細檢查數據類型

確保數據類型是正確的。

這是一個錯誤?

這可能是一個錯誤,但如果是這樣的話,錯誤應該是微不足道的重現。一旦你仔細檢查了系統的行爲不正確,現在是時候重新制作這個文件,這樣你至少可以提交一個bug。

+0

編輯過的問題與索引輸出和MongoDB的版本是不同的(這可能是問題吧?) – Radek

+0

較小的數據集,仍然沒有;數據類型是字符串,嘗試使用ObjectId以及 – Radek

+0

它是版本...已經升級到最新的10gen .. ..尷尬。謝謝。 – Radek

0

pymongo需要特殊運算符的引號 - 你試過嗎?

db.employees.find({ '$or' : [ { 'name.first' : 'Joe' }]})