2011-08-23 47 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' }]})