Используя пакет узел-mongodb-родной npm в приложении node.js, если я получаю объект коллекции в начале долго выполняющегося асинхронного сценария node.js, например так:
var collection = await db.collection(collectionName);
Если коллекция будет изменена до того, как я выполню метод find()
этого объекта коллекции, будут ли результаты find({})
актуальными или будут отображаться только данные, которые были на момент получения объекта коллекции?
Например, давайте гипотетически предположим, что через 10 минут скрипт доходит до такой строки:
let cursor = await collection.find({});
Кроме того, предположим, что за это время элементы были добавлены, удалены и изменены до вызова find()
.
Будет ли результирующий курсор перемещаться по текущим данным или данные будут такими, какими они были в то время, когда я получил объект коллекции (в начале сценария)?
Я действительно сомневаюсь, что он сделает снимок коллекции, когда вы ее приобретете.
Видеть: https://docs.mongodb.com/manual/reference/method/db.getCollection/
Возвращаемое значение find
будет курсором в текущее состояние.
Wil the resulting cursor navigate current data or will the data be as it was at the time that I acquired the collection object (at the beginning of the script)?
Результирующий курсор проходит через текущие данные.
IDK TBH, toArray()
создает снимок совпадающих документов в ОЗУ, перебирая курсор. Итак, это означает снимок, но это также перебирает курсор, так что вопрос остается. Проще всего написать небольшой пример, в котором вы запрашиваете коллекцию, а затем запускаете цикл, который ожидает нажатия клавиши на каждой итерации, перемещает курсор один раз и печатает результат. Тем временем вы можете попробовать вставить/обновить/удалить документы и посмотреть, не повлияют ли это на результаты.
Кроме того, что, если элементы добавляются, удаляются и изменяются во время перемещения курсора? Остаются ли данные курсора текущими или это моментальный снимок, когда я вызвал метод find()?