【问题标题】:python flask mongodb insert datapython烧瓶mongodb插入数据
【发布时间】:2020-05-03 13:01:15
【问题描述】:

如何在 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})

【问题讨论】:

  • 那么你得到了什么错误?您的意思是使用insert_one 而不是insert
  • @GonzaloHernandez 我不知道我是烧瓶 python 的新手,我希望 result 字典应该插入到 user1 检测列表中

标签: python python-3.x mongodb flask pymongo


【解决方案1】:

由于文档已经存在,您需要更新它而不是插入,此外,由于您想将某些内容插入到数组中,它应该通过 $push,另外,您可以使用 find_one_and_update 而不是进行两次 DB 调用,这将使用此选项返回更新的文档 :: return_document = ReturnDocument.AFTER 或在未找到匹配文档的情况下返回 none。基于此,您可以返回响应。通常,您将使用insertinsert_one 将新文档插入到colleciton。我对pymongo 有点陌生,请添加代码以检查 DB 中的错误场景,另外测试此代码,您可以随时根据任何发现更新此答案..

试试这个:

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'})

【讨论】:

  • 它的工作,但它没有生成 id 的结果,有 2 个用户集合,其中一个具有 detection 和其他集合名称 detection 的列表,我希望与它的 id 相同的检测应该添加到用户
  • @chiragprajapati : MongoDB 是 NoSQL,两个集合之间没有关系,如果您需要这种关系,您需要将 detection 文档作为子文档添加到 user 的相关文档中,或者您需要在user 中插入/更新文档时传递相对detection 文档的ids。你可以用一个查询读取两个集合,但你不能写入两个集合,没有关系..
  • 是的,我希望 detection 文档作为 user 相关文档的子文档,我该怎么做?
  • @chiragprajapati:你这是什么意思?在detection集合中插入数据时,您需要在user集合中插入相应的ids用于检测文档,您必须通过代码/手动来做到这一点 - MongoDB无法做到。
  • 我该怎么做?
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 2019-02-24
  • 2018-08-22
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多