MongoDB $ или запрос не работает для меня после mongorestore - PullRequest
1 голос
/ 24 августа 2011

Я запустил 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 ]

4 голосов
/ 24 августа 2011

Чтобы действительно помочь здесь, нам нужно несколько частей информации:

  • номера версий (MongoDB и pymongo, сервер и новый компьютер)
  • вывод из db.employees.getIndexes()
  • Вы можете запустить тест на меньшем наборе данных?(см. ниже)
  • вы можете перепроверить типы данных?

Меньший набор данных

Попробуйте скопировать небольшой наборemployees к новой коллекции и выполнить те же запросы:

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

По сути, давайте попробуем исключить повреждение данных.Затем давайте попробуем изолировать версию и посмотреть, является ли это известной ошибкой.

Перепроверить типы данных

Убедитесь, что типы данных верны.

Это ошибка?

Это может быть ошибка, но если она есть, ошибка должна быть тривиальной для воспроизведения.После того, как вы дважды проверили, что система работает некорректно, пришло время повторить это, чтобы вы могли хотя бы сообщить об ошибке.

0 голосов
/ 09 января 2013

pymongo требует кавычек вокруг специальных операторов - вы пробовали это?

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