Ho bisogno di cercare attraverso una raccolta di documenti ma anche qualsiasi documento secondario e rinominare un campo intitolato "en" a "en-GB" in ogni occorrenza, ho provato questo codice ma continuo a ottenere un'esecuzione JavaScript fallita: RangeError: errore di dimensione massima dello stack delle chiamate superato. Il problema è cercare tra i documenti secondari utilizzando la funzione senza conoscere il percorso.Ricerca ricorsiva in Mongodb
remap = function (x) {
if (x.en){
db.products.update({_id:x._id}, {$rename:{"en":"en-GB"}}, false, true); }
for (var propt in x) {
if (Object.prototype.toString.call(x[propt]) === '[object Array]' ||
Object.prototype.toString.call(x[propt]) === '[object Object]'){
remap(x[propt]);
}
}
}
Ho anche scritto qualcosa di simile che invece lo aggiunge a una coda utilizzando una matrice, ma hanno bisogno di un modo di salvare il percorso sotto-documenti quali "document.subdocument" e quindi eseguire di nuovo attraverso la funzione per verificare il campo.
Potrebbe esserci un riferimento circolare nell'oggetto? X punta a Y, Y punta a Z, Z punta a X? Ciò causerebbe un overflow dello stack. – Brandon
Dovresti usare 'x [propt]' piuttosto che il valore di 'propt', poiché questo è solo il nome della proprietà di' x'. – WiredPrairie