在mongorestore之后MongoDB $或查询不适用于我

时间:2011-08-23 21:35:31

标签: mongodb pymongo

我运行了 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。

2 个答案:

答案 0 :(得分:4)

要真正提供帮助,我们需要一些信息:

  • 版本号(MongoDB和pymongo,服务器和新计算机)
  • db.employees.getIndexes()
  • 的输出
  • 你可以在较小的数据集上运行测试吗? (见下文)
  • 你能仔细检查数据类型吗?

较小的数据集

尝试将一小组employees复制到新的集合并运行相同的查询:

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

基本上,让我们试着排除数据损坏。然后让我们尝试隔离版本,看看这是否是一个已知错误。

仔细检查数据类型

确保数据类型正确。

这是一个错误吗?

这可能是一个错误,但如果是这样,那么错误应该很容易重现。一旦你仔细检查了系统的行为是否正确,就可以重新进行此操作,以便至少可以提交错误。

答案 1 :(得分:0)

pymongo需要特殊操作员的引号 - 你试过这个吗?

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