2012-09-13 35 views
5

Tengo una colección de bases de datos (ff con nombre), así:

{'followers': 
     { 
      '123':1 
      '123':2 
      '123':3 
     } 
} 

Si corro el (pymongo Uso) consulta:

cursor = fols.find() 
cursor.count() 
>>3 

funciona bien. Ahora:

cursor = fols.find({'followers':{'123':1}}) 
cursor.count() 
>>1 

De nuevo funciona bien. PERO si lo intento:

cursor = fols.find({'followers':{'123':{'$exists': True}}}) 
cursor.count() 
>> 0 

Devuelve 0 aunque haya 3 registros.

+1

Puede aclarar: ¿Tiene una colección 'seguidores' con tres documentos: {'123': 1}, {'123': 2}, {'123': 3} o tiene una colección' fols 'que contiene un único documento con 3 subdocumentos: {'followers': {'123': 1}, {'123': 2}, {'123': 3}}? Porque la clave '123' se sobrescribirá y solo queda una copia. – Thomas

+0

Tengo una colección fols que contiene un solo documento "seguidores" que contiene los otros valores. Y puedo confirmar que no se sobrescribe como si lo hiciera: fols.find(). Devuelve todos mis 3 documentos. – Amitash

+1

Si tiene un único documento en la colección fols, entonces fols.find() solo debe devolver un solo documento, no 3. Intenté esto en el shell de mongo: db.fols.insert ({'followers': {'123 ': 1,' 123 ': 2,' 123 ': 3}}) y con db.fols.find() get back {"_id": ObjectId ("505149486195484752df6214"), "followers": {"123": 3}}. – Thomas

Respuesta

19

Cuando no está haciendo coincidir un objeto completo, necesita usar dot notation para usar un operador contra un objeto incrustado. Así que en este caso:

cursor = fols.find({'followers.123':{'$exists': True}}) 
+1

Eso funcionó como un amuleto. ¡Gracias! – Amitash

5

Prueba el sintaxis con punto:

cursor = fols.find({'followers.123': {'$exists': True}}) 

Pero también ver mi comentario anterior. No puede tener la misma clave más de una vez en un (sub) documento.

Cuestiones relacionadas