Создание динамических моделей в MongoEngine - PullRequest
0 голосов
/ 09 июня 2019

Я новичок в MongoDB и MongoEngine, и в настоящее время мои документы относятся к типу ниже:

[
    {
        "Question1": "How do you rate the whole restaurant",
        "Rating": [
            "Poor",
            "Average",
            "Good"
        ],
        "next": [
            {
                "Question2": "How do you rate food plates cleanness",
                "Rating": [
                    "Poor",
                    "Average",
                    "Good"
                ]
            },
            {
                "Question3": "How do you rate floor cleanness",
                "Rating": [
                    "Poor",
                    "Average",
                    "Good"
                ]
            }
        ]
    },
    {
        "Question4": "How do you rate food taste",
        "Rating": [
            "Poor",
            "Average",
            "Good"
        ]
    }
]

Я думаю создать модели mongoengine следующим образом:

class Ratings(db.EmbeddedDocument):
    Rating = db.ListField()

class Questions(db.EmbeddedDocument):
    Question = db.StringField()
    rating_type = db.EmbeddedDocumentField(Ratings)

class FeedbackFormTemplate(db.Document):
    pass

Указанные выше классы (Вопросы и рейтинги) будут использоваться для создания вопросов и оценок.

Я хочу использовать класс: FeedbackFormTemplate для создания документов.Но я не получаю никаких идей по созданию моделей.

Любая помощь в этом очень ценится.

1 Ответ

0 голосов
/ 09 июня 2019

Если вы не привязаны к форме схемы, которую вы упомянули выше, я бы порекомендовал следующее:

class QuestionDefinition(EmbeddedDocument):
    question = StringField()
    ratings = ListField(StringField(), default=["Poor", "Average", "Good"])
    next_questions = EmbeddedDocumentListField("self")

class FeedbackFormTemplate(Document):
    questions = EmbeddedDocumentListField(QuestionDefinition)

q1 = QuestionDefinition(question='Food good?')
q2 = QuestionDefinition(question='Plates cleanness?')
q1.next_questions = [q2]

q3 = QuestionDefinition(question='food taste?', ratings=['bad', 'terrible'])
FeedbackFormTemplate(questions=[q1, q3]).save()

print(FeedbackFormTemplate.objects.as_pymongo().first())    # print raw object as stored in mongo

Что бы хранить следующее в монго:

{  
   '_id':ObjectId('5cfd5c49caf5e58c7b22f4a8'),
   'questions':[  
      {  
         'question': 'Food good?',
         'ratings': ['Poor', 'Average', 'Good'],
         'next_questions':[  
            {  
               'question': 'Plates cleanness?',
               'ratings': ['Poor', 'Average', 'Good'],
               'next_questions':[]
            }
         ]
      },
      {  
         'question': 'food taste?',
         'ratings': ['bad', 'terrible'],
         'next_questions': []
      }
   ]
}
...