我无法根据用户表单在MongoDB中构造数据。
我理想的文档结构是:
如您所见,成分位于可迭代的数组中。
但是,在提交表单时,我无法找到一种方法。我的“成分”部分表格如下:
<h4>Ingredients</h4>
</div>
<div class="row">
<div class="input-field col s6">
<input id="ingredients_1_name" name="ingredients_name_1" type="text" class="validate" required>
<label for="ingredients_1_name">Ingredient</label>
</div>
<div class="input-field col s3">
<input id="ingredients_1_quantity" name="ingredients_quantity_1" type="text" class="validate" required>
<label for="ingredients_1_quantity">Quantity</label>
</div>
<div class="input-field col s3">
<input id="ingredients_1_unit" name="ingredients_unit_1" type="text" class="validate" required>
<label for="ingredients_1_unit">Unit</label>
</div>
</div>
用户可以按下JavaScript按钮,添加一个名为“ ingredients_2_name”的新行,依此类推。这导致了一个非常非结构化的数据库:
这显然是一团糟,在使用数据时需要不必要的操作。
我似乎在网上找不到任何有关如何以定义的方式将数据从HTML表单发送到MongoDB的信息。
当前提交表单时,视图如下:
@app.route('/insert_recipe/', methods=['GET','POST'])
def insert_recipe():
"""
This function is called when a user clicks the submit button on the add
recipe form. Uses the insert_one() method to add to the recipes document.
"""
recipes = mongo.db.recipes
dictionary = recipes.insert_one(request.form.to_dict())
return redirect(url_for("get_recipes"))
这只是将输入名称作为键,将用户输入作为值。
有人能描述我如何以结构化方式在MongoDB中存储表单数据吗?
答案 0 :(得分:0)
您需要的是将纯HTML表单发布请求转换为类似JSON的结构,而无需任何数据操作。我非常怀疑这是否可能,因为JSON对象使用嵌套数据,并且键/索引方法可以访问它,而HTML-form-post数据是 flat 并且遵循唯一性-id-approach来访问它的数据。我可以看到2种可能的解决方案: