A PyMongo Cursor , результат вызова find()
, на самом деле не список, он просто реализует __getitem__
для эмуляции доступа, подобного списку. Фактически, каждый раз, когда вы используете нотацию доступа к элементу, он выполняет новый запрос к базе данных с соответствующими установленными skip()
и limit()
, чтобы вернуть искомый элемент. Таким образом, как вы и подозревали в комментариях, изменение результата articles[0]
не сработает, но создание ссылки на результат articles[0]
с последующим изменением и использованием этого в update()
будет работать.
Вы также должны знать, что при определенных обстоятельствах (в основном, если модификация приводит к тому, что документ выходит за пределы свободного пространства, доступного «рядом» с ним), документ может быть перемещен на диск / в память MongoDB. Поскольку вы не используете sort()
в своем вызове find()
, вы получаете результаты в неопределенном порядке. При перемещении документов порядок результатов в вызове find()
может измениться, если документы были перемещены.