Потяните в mongoengine - PullRequest
       3

Потяните в mongoengine

2 голосов
/ 31 января 2012

У меня есть ListField(DictField), который содержит такие элементы, как -

{'user_id': '12345', 'timestamp' : 'datetime-object'}

В mongoengine, как я могу удалить элементы из списка, запрошенного в user_id. Например, я хочу удалить записи с определенным идентификатором пользователя. Я попробовал следующее -

update_one(pull__notes__user_id = '12345')

Здесь notes - название коллекции.

Этот оператор возвращает 1, но не удаляет элемент из списка. Как я могу это сделать?

1 Ответ

6 голосов
/ 31 января 2012

Два способа сделать это:

A) Точно соответствует элементу:

class Simple(Document):
    x = ListField()

Simple.drop_collection()
Simple(x=[{'hello': 'world'}, {'mongo': 'db'}]).save()

// Pull the dict
Simple.objects.update_one(pull__x={'mongo': 'db'})

B) Совпадение части элемента. Используйте позиционный оператор , чтобы сопоставить элемент и сбросить его.

class Simple(Document):
    x = ListField()

Simple.drop_collection()
Simple(x=[{'hello': 'world'}, {'mongo': 'db'}]).save()

// Set to None
Simple.objects.update_one(unset__x__S__mongo='db')
// Pull None
Simple.objects.update_one(pull__x=None)
...