Pergunta

Gostaria de consultar uma coleção Mongo para registros que não têm um valor para um campo chamado 'esquema' ou ter explicitamente o valor 'http' para 'esquema'. Parece muito fácil, mas esse problema se mostrou mais complexo do que aparece pela primeira vez.

Desde db.collection.find({'scheme': None}) Retorna todos os registros onde o 'esquema' é indefinido (sem campo de índice), inicialmente assumi que o seguinte funcionaria:

db.collection.find({'scheme': {'$in': ['http', None]}})

No entanto, isso parece excluir valores nos quais o 'esquema' é indefinido, então só posso assumir que está procurando registros onde o esquema é 'http' ou explicitamente definido para ser None. Isso parece ser um pouco contra -intuitivo, mas aí estamos. Minha segunda tentativa foi a seguinte:

db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})

Isso também exclui o resultado onde o esquema é indefinido. Desta vez, não consigo nem pensar em uma razão lógica para que isso esteja falhando.

Alguma idéia de por que isso está falhando e como posso fazê -lo funcionar como desejado?

Obrigado

EDIT: Apenas pensei em observar que estou realizando esta consulta através do Python (Pymongo), o que explica o None (sobre JavaScript's null)

Foi útil?

Solução

Resolvido: Aparentemente, este é um problema da minha versão do MongoDB (1.4.4), o problema é resolvido em 1.6.5.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top