python flask данные вставки mongodb - PullRequest
1 голос
/ 16 января 2020

как мне вставить данные указанному c пользователю в python flask mongodb

{
    "_id" : ObjectId("5e208aa1f86973bbd7db6e8a"),
    "worker_name" : "user1",
    "location" : "location1",
    "detection" : [ ]
},
{
    "_id" : ObjectId("5e208aa1f86973bbd7db6e8b"),
    "worker_name" : "user2",
    "location" : "location2",
    "detection" : [ ]
}

выше мои пользователи, я хочу вставить некоторые данные в список user1 detection ниже мой код, который я пробовал

def face_detection():
    face_module = mongo.db.face_modules
    user = mongo.db.users
    stream_link = request.form['stream_link']
    location = request.form['location']
    camera = request.form['camera']
    result = {
            "location": location,
            "stream_url": stream_link,
            "worker_name": "user1",
            "date": "1/1/2020",
            "hour": "9",
            "minute": "10",
            "second": "25"
        }
    if user.find({"worker_name": result['worker_name']}).count() > 0:
        update_user = user.detection.insert(result)
        output = "user updated"
        return jsonify({'result': output})

1 Ответ

1 голос
/ 16 января 2020

Поскольку документ уже существует, вам нужно обновить его, а не вставлять. Кроме того, поскольку вы хотите вставить что-либо в массив, оно должно быть через $push, плюс вместо двух вызовов БД вы можете использовать find_one_and_update, что верните обновленный документ с этой опцией :: return_document = ReturnDocument.AFTER или вернете none в случае, если соответствующий документ не найден. На основании этого вы можете вернуть ответ. Как правило, вы используете insert или insert_one для вставки нового документа в коллекцию. Я немного новичок в pymongo. Пожалуйста, добавьте код, чтобы проверить сценарий ошибки из БД, плюс протестируйте этот код, и вы можете обновить этот ответ, если у вас есть какие-либо результаты ..

Попробуйте это:

def face_detection():
face_module = mongo.db.face_modules
user = mongo.db.users
stream_link = request.form['stream_link']
location = request.form['location']
camera = request.form['camera']
result = {
        "location": location,
        "stream_url": stream_link,
        "worker_name": "user1",
        "date": "1/1/2020",
        "hour": "9",
        "minute": "10",
        "second": "25"
    }
resp = user.find_one_and_update(
    {"worker_name": result['worker_name']},
    { '$push': {'detection' : result} },
    return_document = ReturnDocument.AFTER)


if resp :
    return jsonify({'result': resp})
else :
    return jsonify({'result': 'No document found'})
...