'Return a PyMongo cursor object corresponding to this queryset.'

@property
def _cursor(self):

    if (self._cursor_obj is not None):
        return self._cursor_obj
    if (IS_PYMONGO_3 and (self._read_preference is not None)):
        self._cursor_obj = self._collection.with_options(read_preference=self._read_preference).find(self._query, **self._cursor_args)
    else:
        self._cursor_obj = self._collection.find(self._query, **self._cursor_args)
    if self._where_clause:
        where_clause = self._sub_js_fields(self._where_clause)
        self._cursor_obj.where(where_clause)
    if self._ordering:
        self._cursor_obj.sort(self._ordering)
    elif ((self._ordering is None) and self._document._meta['ordering']):
        order = self._get_order_by(self._document._meta['ordering'])
        self._cursor_obj.sort(order)
    if (self._limit is not None):
        self._cursor_obj.limit(self._limit)
    if (self._skip is not None):
        self._cursor_obj.skip(self._skip)
    if (self._hint != (-1)):
        self._cursor_obj.hint(self._hint)
    if (self._batch_size is not None):
        self._cursor_obj.batch_size(self._batch_size)
    return self._cursor_obj
