2013-07-25 15 views
24

Sto cercando il modo corretto per rimuovere tutti gli elementi da un campo di matrice (in tutti i documenti) in MongoDB - questi sembrano essere equivalenti, che è raccomandato:Mongodb - modo corretto per cancellare tutti gli elementi in un campo array?

db.collection.update({}, { $pull : { 'myArray': {} }}, {multi:true}) 
(o forse qualche altro modo?)

o

db.collection.update({}, { $set : {'myArray': [] }} , {multi:true}) 

risposta

22

la variante $set sarà più veloce come il $pull dovrà fare calcoli su array. In realtà non sono nemmeno sicuro se funzionerà, dato che in realtà non stai rimuovendo alcun elemento con la tua query.

3

Per sicurezza, è necessario mantenere un array vuoto? Perché altrimenti, probabilmente è meglio farlo da $unset.

Se è necessario mantenere un array vuoto, credo che la chiamata $pull non funziona - io penso rimuoverà tutti gli elementi vuoti dal vostro allineamento, non tutti gli elementi.

2

Secondo il documento ufficiale di MongoDB:

Quando utilizzato con $ per corrispondere a un elemento di un array, $ impostata sostituisce l'elemento abbinamento con null piuttosto che rimuovere l'elemento corrispondente dalla matrice. Questo comportamento mantiene coerenti le dimensioni dell'array e le posizioni degli elementi .

Il set $ dovrebbe essere il modo corretto.

Problemi correlati