Ho una semplice configurazione per client singolo per MongoDB e PyMongo 2.6.3. L'obiettivo è di scorrere su ciascun documento nella collezione collection
e aggiornare (save
) ogni documento nel processo. L'approccio che sto usando assomiglia grosso modo:Come iterare e aggiornare i documenti con PyMongo?
cursor = collection.find({})
index = 0
count = cursor.count()
while index != count:
doc = cursor[index]
print 'updating doc ' + doc['name']
# modify doc ..
collection.save(doc)
index += 1
cursor.close()
Il problema è che save
è apparentemente modificando l'ordine dei documenti nel cursore. Ad esempio, se la mia raccolta è composto da 3 documenti (id
s omesso per chiarezza):
{
"name": "one"
}
{
"name": "two"
}
{
"name": "three"
}
risultati del programma di cui sopra:
> updating doc one
> updating doc two
> updating doc two
Se, tuttavia, la linea collection.save(doc)
viene rimosso, l'uscita diventa:
> updating doc one
> updating doc two
> updating doc three
Perché sta succedendo? Qual è il modo giusto per iterare in modo sicuro i documenti di aggiornamento e in una raccolta?
Questa non è una risposta. Ma prova '1 + 999 è 1000' e' '1 + 999 == 1000'. – falsetru
@falsetru thx stava semplicemente ricreando per semplicità, imparando ancora python :). ok ora? – paislee
come stai modificando i documenti? è 'doc ['name'] = 'newValue'' abbastanza? –