Заполнить в Mongoengine, поле ссылки

#python #mongodb #mongoengine

#python #mongodb #mongoengine

Вопрос:

Есть ли у mongoengine аналогичный метод для заполнения

 db.collection.posts.findById(id).populate('user_id')
 

Ответ №1:

день проходит, но я все еще не видел ничего, что связано .populate() с документацией API mongoengine , и я решил сделать по-своему.

mongoengine это объектно-ориентированный драйвер, сравните с mongoose уже предопределенной функцией .populate() , но если вы знаете, как работает ООП, для вас это просто кусок пирога, вот простой трюк

 # .schema.author.py
class Author(Document):
   name = StringField(required=True)

# .schema.book.py
class Book(Document):
    title = StringField()
    author = ReferenceField(Author)

    def tojson(self):
        json = {
            'title ': self.title ,
            'author ': self.author,
        }
        json['author'] = self.author.name
        return json

# .route.book.py
def get(self):
    try:
       books = []
       for book in Book.objects:
          books.push(book.tojson())

       return {'status': True, 'response': books}
    except Exception as e:
        print(e)
  
 

и ожидаемый результат должен быть заполнен Author для каждого Book объекта

 {
  "status": true,
  "response": [
     {
         "title": "<book-name>",
         "author": {
            "name": "<author-name>"
         }
     }
  ]
}
 

Ответ №2:

Я не эксперт в MongoEngine, но вы можете запросить следующим образом:

post = Posts.objects(id=id).first()

Это возвращает данные из этой модели, и они уже заполнены. Вы можете получить доступ к автору сообщения, используя:

post.author.name

Комментарии:

1. Пожалуйста, используйте раздел комментариев для предложений!