我运行了 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
}
}
]
我通过控制台运行查询,而不是pymongo。
答案 0 :(得分:4)
要真正提供帮助,我们需要一些信息:
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' }]})