Я обнаруживаю узел и пн go одновременно, и у меня был один вопрос:
У меня есть коллекция City:
{
_id : mongoid
countryId : string
name : string
}
Каждый город привязан к одной стране , и несколько городов могут быть присоединены к одной стране. По внешней причине эти данные были повреждены, и некоторые города имеют имя, равное нулю, а не действительное значение (например, Париж или Лондон). Мне нужно удалить все города (с допустимым именем или пустым именем) для страны, в которой хотя бы один город имеет имя, равное нулю.
Например:
- если в стране Франция всего 2 города (один с названием Париж, а другой с именем Марсель), ничего не нужно удалять
- , если в стране Франция только 2 города (один с названием Париж, а другой с нулевым именем), оба города должны быть удалены
- если в стране Франция есть только 2 города (оба с пустыми названиями), оба города должны быть удалены
Мне удалось сделать это с помощью следующего code (node-mongodb-native 3.1 и node 12.16.1):
const invalidCountryIds = await db.collection('City').distinct('countryId',
{
name:null
}
console.log(invalidCountryIds.length)
invalidCountryIds.forEach(async countryId => {
await db.collection('City').deleteMany({
countryId:countryId
})
Однако у меня есть 2 вопроса, эта коллекция City может быть очень большой (более 10k записей) поэтому я хотел быть уверен, что делаю это наиболее эффективным способом:
- когда я вызываю
.length
, загружаю ли я всю коллекцию invalidCountryIds
в память - это foreach лучший способ итерации на th является набором
invalidCountryIds
, я вижу в документации, что я также могу использовать метод .next
, доступный из объекта курсора, есть ли разница между итерацией с этим foreach
и next cursor
, оба загружаются в память только текущий элемент коллекции?
Заранее спасибо