【问题标题】:Creating Dynamic Models in MongoEngine在 MongoEngine 中创建动态模型
【发布时间】:2019-10-24 00:36:48
【问题描述】:

我是 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 来创建文档。但是我对构建模型没有任何想法。

非常感谢您对此的任何帮助。

【问题讨论】:

    标签: mongodb mongoengine flask-mongoengine


    【解决方案1】:

    如果您不受上述模式的约束,我建议您使用以下方法:

    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
    

    这会将以下内容存储在 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': []
          }
       ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2011-04-12
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多