【问题标题】:PYMONGO- Update specific item in listPYMONGO-更新列表中的特定项目
【发布时间】:2021-07-24 03:49:36
【问题描述】:

在发布之前,我已查看以下链接以获取有关此问题的信息 https://www.youtube.com/watch?v=XRXjJRJ03_A Update field in exact element array in MongoDB

我的数据

{
    '_id': ObjectId('608b07c8f2cd2853333e1892'),
    'DISNAME': '92bricks#4696',
    'AVATAR': 'https://cdn.discordapp.com/avatars/306429381948211210/bcbd8bffe41170afedf18bebe030c675.webp?size=1024',
    'IGN': [{
        'Call Of Duty Mobile': 'BRICKS'
    }],
    'GAMES': ['Call Of Duty Mobile'],
    'TEAMS': ['mcdonalds'],
    'TITLES': ['PCG'],
    'RANKED': [{
        '1V1': [0, 0, 0]
    }, {
        '2V2': [0, 0, 0]
    }, {
        '3V3': [0, 0, 0]
    }, {
        '4V4': [0, 0, 0]
    }, {
        '5V5': [0, 0, 0]
    }],
    'NORMAL': [{
        '1V1': [0, 0, 0]
    }, {
        '2V2': [0, 0, 0]
    }, {
        '3V3': [0, 0, 0]
    }, {
        '4V4': [0, 0, 0]
    }, {
        '5V5': [0, 0, 0]
    }],
    'TOURNAMENT_WINS': 0,
    'TIMESTAMP': 'Thu Apr 29 12:21:53 2021'
}

我正在尝试更新/增加 NORMAL.$.1V1.1(0 数组中的中间项)

我试过 {'$set': {'NORMAL.$.1V1.1': 1}} 但它一直抛出错误 full error: {'index': 0, 'code': 2 , 'errmsg': '位置运算符没有从查询中找到所需的匹配项。'}

我上面链接的视频说要按照我上面发布的语法构建逻辑 ({'$set': {'NORMAL.$.1V1.1': 1}})。有什么想法吗?

【问题讨论】:

    标签: python arrays pymongo


    【解决方案1】:

    在 Belly Buster 的帮助下找到了答案。

    new_value = {"$inc": {'NORMAL.$[type].' + game_type.upper() + '.1': 1}}
    filter_query = [{'type.' + game_type.upper(): current_score}]
    

    这将根据现有数据使其动态化。

    【讨论】:

      【解决方案2】:

      如果您知道要专门更新的是那个项目,那么更新是:

      db.coll.update_one({}, {'$set': {'NORMAL.0.1V1.1': 1}})
      

      【讨论】:

      • 为什么是 0 而不是位置运算符?
      • 因为如果你知道它是第一项你就不需要位置操作符了。
      • 它按照您的建议工作。现在的问题是我希望这是动态的。我尝试了用户 'NORMAL.$[].1V1.1' 但这会更新 NORMAL 数组中的所有对象。如果我想让它更有活力,0 需要转移到什么位置?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2013-04-27
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多