【问题标题】:mongoose push an object into a nested array after matching element猫鼬在匹配元素后将对象推入嵌套数组
【发布时间】:2022-01-03 13:14:27
【问题描述】:

在对象数组中找到匹配元素后,我试图将对象推入数组

这是我的播放列表集合的结构示例:

playlist: {
    userName: 'user-name',
    userId: 'user-id',
    playlistArray: [
        {
            playlistName: 'playlist1',
            playlistSongs: [
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
            ],
        },
        {
            playlistName: 'playlist2',
            playlistSongs: [
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
            ],
        },
    ],
}

这是我试图插入到playlistSongs 数组中的对象,该数组还包含同一对象中的playlistName: 'playlist2'

{ track: 'sometrackinfo', title: 'sometracktitle', duration: 123, uri: 'sometrackuri' }

所以结果应该是这样的:

playlist: {
    userName: 'user-name',
    userId: 'user-id',
    playlistArray: [
        {
            playlistName: 'playlist1',
            playlistSongs: [
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
            ],
        },
        {
            playlistName: 'playlist2',
            playlistSongs: [
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
                { track: '', title: '', duration: 0, uri: '' },
                { track: 'sometrackinfo', title: 'sometracktitle', duration: 123, uri: 'sometrackuri' },
            ],
        },
    ],
}

【问题讨论】:

    标签: arrays mongodb mongoose


    【解决方案1】:

    使用arrayFilters 和过滤$[<identifier>] 运算符。

    db.collection.update({},
    {
      "$push": {
        "playlist.playlistArray.$[pl].playlistSongs": {
          track: "sometrackinfo",
          title: "sometracktitle",
          duration: 123,
          uri: "sometrackuri"
        }
      }
    },
    {
      arrayFilters: [
        {
          "pl.playlistName": "playlist2"
        }
      ]
    })
    

    Sample Mongo Playground

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多