我已经阅读了这些教程,并且因为我使用的是三个不同的东西: 1. Flask作为服务器 2. PyMongo作为MongoDB驱动程序 3. PyMODM作为模式创建者
我已经很困惑了。
首先,我已经使用PyMODM定义了架构:
from pymongo import TEXT
from pymongo.operations import IndexModel
from pymodm import connect, fields, MongoModel, EmbeddedMongoModel
class GoalPosition(EmbeddedMongoModel):
x = fields.IntegerField()
y = fields.IntegerField()
class GoalOrientation(EmbeddedMongoModel):
x = fields.IntegerField()
class Goal(EmbeddedMongoModel):
position = fields.EmbeddedDocumentField(GoalPosition)
orientation = fields.EmbeddedDocumentField(GoalOrientation)
class Path(MongoModel):
path = fields.EmbeddedDocumentListField(Goal)
从以上所述,我的想法是制作两种类型的架构:目标和路径。最后,目标将如下所示:
{
"position": {
"x": "1",
"y": "6"
},
"orientation": {
"x": "0"
}
}
“路径”将是“目标”列表。 有了我的架构,最大的问题是,如何使用它与MongoDB数据库进行通信?这是我的小型服务器代码:
from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from flask_pymongo import PyMongo
from flask import jsonify
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb+srv://user:pass@cluster0-qhfvu.mongodb.net/test?retryWrites=true"
mongo = PyMongo(app)
@app.route('/goal', methods=['GET', 'POST'])
def goals():
if request.method == 'GET':
goals = mongo.db.goals.find()
return jsonify(goals)
elif request.method == 'POST':
position = request.body.position
orientation = request.body.orientation
print position
flash("Goal added")
@app.route('/goal/<id>')
def goal(id):
goal = mongo.db.goals.find_one_or_404({"_id" : id})
return jsonify(goal)
因此,仅关注路线'/ goal'上的GET方法,如何从数据库中检索所有目标消息?
我还想知道如何在“ / goal /”处检索最后一个目标消息?
答案 0 :(得分:0)
def goals():
if request.method == 'GET':
goals = mongo.db.goals.find()
return jsonify(goals)
您已经在检索目标集合中的所有记录。下面的示例将为您提供最新的记录。
def goals():
if request.method == 'GET':
goals = mongo.db.goals.find().sort({'_id',-1}).limit(1)
return jsonify(goals)
。
def goals():
if request.method == 'GET':
goals = mongo.db.goals.find().sort({'_id',-1})
return jsonify(goals)
以上示例将以降序返回目标集合中所有数据的列表,这意味着最后一次更新将排在最前
要查找
mongo.db.goals.find_one({"_id": ObjectId(id)})