2012-09-13 14 views
5

Ho una collezione di database (denominati cc) in questo modo:

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

Se corro il (pymongo Utilizzando) query:

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

funziona bene. Ora:

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

Ancora funziona bene. MA se provo:

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

Restituisce 0 anche se ci sono 3 record.

+1

Puoi chiarire: hai una raccolta 'follower' con tre documenti: {'123': 1}, {'123': 2}, {'123': 3} o hai una raccolta' fols 'che contiene un singolo documento con 3 documenti secondari: {'followers': {'123': 1}, {'123': 2}, {'123': 3}}? Perché la chiave "123" verrebbe sovrascritta e rimane solo una copia. – Thomas

+0

Ho un gruppo di raccolta che contiene un singolo documento "seguaci" che contiene gli altri valori. E posso confermare che non viene sovrascritto come se lo facessi: fols.find(). Restituisce tutti i miei 3 documenti. – Amitash

+1

Se si ha un singolo documento nella collezione fols, quindi fols.find() dovrebbe restituire solo un singolo documento, non 3. Ho provato questo nella shell di mongo: db.fols.insert ({'followers': {'123 ': 1,' 123 ': 2,' 123 ': 3}}) e con db.fols.find() torna {"_id": ObjectId ("505149486195484752df6214"), "followers": {"123": 3}}. – Thomas

risposta

19

Quando non si combina un oggetto completo, è necessario utilizzare dot notation per utilizzare un operatore contro un oggetto incorporato. Quindi in questo caso:

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

Ha funzionato come un incantesimo. – Amitash

5

provare la sintassi punto:

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

ma anche vedere il mio commento sopra. Non è possibile avere la stessa chiave più di una volta in un (sotto) documento.

Problemi correlati