【问题标题】:In pymongo: How can I append new dict in an existing array在 pymongo 中:如何在现有数组中附加新的 dict
【发布时间】:2022-01-05 16:51:41
【问题描述】:

我找到了多个关于在 pymongo 数组上推送新元素的教程,但不幸的是,这些教程都不适合我。

我有一个类似这样的文档

{
    "_id": "14487152",
    "added_by": [
        {"name": "Gumi", "user_id": 70658401}
    ]
}

这就是我在 added_by 数组中插入新字典的方法:

def find_product(self, _id):  # Find by Id
    data = self.collection.find_one({"_id": _id})
    return data

def add_new_product(self):
    self.collection.update_one(
        {"_id": self.find_product(_id=product['_id'])},
        {"$push": {"added_by": [{"name": "Harshil", "user_id": 7258757}]}},
        upsert=False)

但是通过这样做,它会创建一个新文档并开始添加类似这样的内容

{
    "_id": {
        "_id": "14487152",
        "added_by": [
            {"name": "Gumi", "user_id": 70658401}
        ]
    },
    "added_by": [
        [
            {"name": "Harshil", "user_id": 7258757}
        ]
    ]
}

那么我到底想要达到什么目的? -- 我想在"added_by"中的现有文档中附加{"name": "Gumi", "user_id": 70658401}

这是我期待的输出

{
    "_id": "14487152",
    "added_by": [
        {"name": "Gumi", "user_id": 70658401},
        {"name": "Harshil", "user_id": 7258757}
    ]
}

【问题讨论】:

  • upsert 是否曾一度设置为 True
  • 您的find_product() 返回的远远超过_id

标签: python python-3.x mongodb pymongo


【解决方案1】:

我会这样写:

def add_new_product(self):
    data = self.find_product(_id=product['_id'])
    newvalue = {"$push": {'added_by': {"name": "Harshil", "user_id": 7258757}}}

    self.collection.update_one({"_id": data['_id']}, newvalue)

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 2018-03-03
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2013-06-30
    • 2017-05-19
    相关资源
    最近更新 更多