Мне нужно выполнить поиск по коллекции документов, а также любых вложенных документов и переименовать поле «en» в «en-GB» в каждом случае, я пробовал этот код, но продолжал выполнять выполнение JavaScript: RangeError: Максимальный размер стека вызовов превышен. Проблема заключается в поиске вложенных документов с использованием функции, не зная пути.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]);
}
}
}
Я также написал что-то подобное, что вместо добавляет его в очередь, используя массив, но нужен способ сохранения пути суб-документов, таких как «document.subdocument», а затем работает через функцию снова проверить поле.
Может ли быть круговая ссылка в объекте? X указывает на Y, Y указывает на Z, Z указывает на X? Это приведет к переполнению стека. – Brandon
Вы должны использовать 'x [propt]', а не значение 'propt', так как это просто имя свойства' x'. – WiredPrairie