2016-07-14 3 views
1

J'écris une fonction de nettoyage qui va supprimer tous les docs invalides de la collection. Pour cela, j'ai une idée pour pousser les valeurs _id invalides dans la variable array et supprimer avec $ in. Après avoir envoyé toutes les valeurs à err Array, j'ai un script pour supprimer les documents correspondants. Cependant, il y a quelque chose qui manque avec le code qui me jette l'erreur au n.toArray().
Quelqu'un peut-il m'aider à corriger le code?mongodb Pousser les valeurs dans la variable de tableau

+0

Quel est le 'critère' ici pour trouver les documents invalides? –

+0

comme mentionné dans l'énoncé du problème, le critère est de supprimer les documents invalides. –

+0

Vous ne savez pas ce qu'est un document non valide. Si vous l'expliquez, quelqu'un peut vous aider à le faire dans un critère. –

Répondre

1
function(scan) { 
    var doc; 
    var nKeys; 
    var err = []; 

    for(var n = 1; n < scan; ++ n) { 
     doc = db.zeroDimFacts.findOne({_id: n}) 
     nKeys = 0; 

     for(k in doc) { 
      ++ nKeys; 
     } 
     if(nKeys < 5) { 
      err.push(n); 
     } 
    } 
    return err; 
}; 

Faites attention à l'appel findOne(). Quand il retourne null, n va entrer dans le tableau qui me semble indésirable.

1

Vous pouvez utiliser findByIdAndRemove({criteria}) et en fonction de la valeur de retour, vous pouvez avoir la logique.

+0

Salut, je ne travaille pas sur mongoose, j'écris une fonction à l'intérieur de mongodb. –

+0

Est-ce que findOneAndDelete help: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndDelete/ – npr

+0

Je ne suis pas sûr à ce sujet, cela peut aider dans un scénario général, car il valide et supprime le document dans Une itération très réussie, il faudrait plus de temps pour une collection ayant des millions de docs. C'est la raison pour laquelle j'ai choisi de collecter d'abord tous les identifiants des documents invalides, puis de les supprimer en une fois. –