【问题标题】:MongoDB: Adding field to array field object based on a field value within objectMongoDB:根据对象内的字段值将字段添加到数组字段对象
【发布时间】:2020-04-28 19:23:18
【问题描述】:

我需要帮助 mongoDB 查询。这是我的收藏。 mongodb中的播放列表

 JukeBox Collection
{
[
roomName : 'room1',
playlist :

[{ Filename: 'file1.mp3',
   Filekeywords: 'party music, couples'
},
{ Filename: 'file2.mp3',
  Filekeywords: 'fine dining, family , kids'
},
{ Filename: 'file1.mp3',
  Filekeywords: 'elderly, family'
}]
},
roomName : 'room2',
playlist : [{
...
}...
]
}

如果文件名与对象字段中的指定匹配,我需要向数组字段“PlayPosition:15 #seconds”的一个对象插入一个字段。更新后的预期集合:

JukeBox Collection
{
[
roomName : 'room1',
playlist :

[{ Filename: 'file1.mp3',
   Filekeywords: 'party music, couples',

},
{ 
   Filename: 'file2.mp3',
   Filekeywords: 'fine dining, family,kids'   
   PlayPosition: 15 #seconds
},
{ Filename: 'file1.mp3',
  Filekeywords: 'elderly, family', 

}]

我想遍历数组字段,找到匹配的字段(文件名),如果不存在则插入'PlayPosition'键+值。如果存在,它应该更新该字段。我的假设是我需要使用 update_one,我应该使用“$addToSet”来实现这一点。我的实用功能如下:

UpdateCurrentPlayStatus(filename = "file2.mp3", position_in_seconds=15):

   #What should be my query?
   JukeBoxUpdate( {roomName: 'room1'}, 
    { 
        "$addToSet":{ 
            "playlist.$": {
                 "Filename": filename,#file2.mp3 . Does this filter 
                 "PlayPosition": position_in_seconds
                 }
        }
    }

它给了我以下异常:pymongo.errors.WriteError: 位置运算符没有从查询中找到所需的匹配项。

我无法弄清楚查询出了什么问题。请帮忙。

【问题讨论】:

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


    【解决方案1】:

    我的查询是这样工作的。

    JukeBox.update_one( {roomName: 'room1', "playlist":{"$elemMatch":{"Filename": filename}} }, 
        { 
            "$set":{ 
                "LessonList.$.PlayPosition": position_in_seconds
                }
    
        }
    

    即使该字段不存在,这也有效。如果存在,它会覆盖现有的字段值。 需要注意的是——如果我想创建任何涉及数组字段元素的查询过滤器,在更新的过滤器部分需要$elemMatch。

    此外,我尝试使用“$addToSet”而不是“$set”。它在字段下创建值数组。

    PlayPosition: 15  #with "$set"
    
    PlayPosition: #with "$addToSet"
    [15]
    

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2021-01-09
      • 2023-03-04
      • 2020-09-02
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多