Как я могу получить данные с помощью PyMongo? - PullRequest
0 голосов
/ 18 декабря 2018

Я прочитал учебники и потому что я использую три отдельные вещи: 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)

Исходя из вышеизложенного, моя идея заключается в создании двух типов схем: Цель и Путь.В конце Goal будет выглядеть так:

{
    "position": {
        "x": "1",
        "y": "6"
    },
    "orientation": {
        "x": "0"
    }
}

И Path будет список целей.Имея мою схему, большой вопрос, как я могу использовать это для связи с моей базой данных 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)

Итак, сосредоточившись только на методе GET на маршруте '/ goal', как я могу получить все сообщения цели из моей базы данных?

Кроме того, я хочу знать как я могу получить последнее сообщение о цели в '/ goal /'?

1 Ответ

0 голосов
/ 18 декабря 2018
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)})
...