猫鼬将每个对象推入数组

mongoose push every object inside of an array

我正在尝试使用 mongoose

将数组中的每个对象推送到 MongoDB 数组中

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

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

我想将以下对象数组推送到 playlistSongs 数组中,该数组在同一对象中也有 playlistName: 'playlist2'

[
    { title: '1', duration: 123, uri: 'a' },
    { title: '2', duration: 456, uri: 'b' },
    { title: '3', duration: 789, uri: 'c' },
]

所以结果应该是这样的:

playlist: {
    userName: 'user-name',
    userId: 'user-id',
    playlistArray: [
        {
            playlistName: 'playlist1',
            playlistSongs: [
                { title: '', duration: 0, uri: '' },
                { title: '', duration: 0, uri: '' },
                { title: '', duration: 0, uri: '' },
            ],
        },
        {
            playlistName: 'playlist2',
            playlistSongs: [
                { title: '', duration: 0, uri: '' },
                { title: '', duration: 0, uri: '' },
                { title: '', duration: 0, uri: '' },
                { title: '1', duration: 123, uri: 'a' },
                { title: '2', duration: 456, uri: 'b' },
                { title: '3', duration: 789, uri: 'c' },
            ],
        },
    ],
}

这是我尝试更新模型的代码:

const newPlaylistSongs = [
    { title: '1', duration: 123, uri: 'a' },
    { title: '2', duration: 456, uri: 'b' },
    { title: '3', duration: 789, uri: 'c' },
];

await playlist
.updateOne(
    {},
    {
        $addToSet: {
            'playlistArray.$[pl].playlistSongs': {
                $each: {
                    newPlaylistSongs
                }
            },
        },
    },
    {
        arrayFilters: [
            {
                'pl.playlistName':'playlist2',
            },
        ],
    }
)
.catch(console.error);

但是我遇到了这个错误:

MongoServerError: The argument to $each in $addToSet must be an array but it was of type object

$each 应具有 array 值。

$each: []
await playlist
.updateOne(
    {},
    {
        $addToSet: {
            'playlistArray.$[pl].playlistSongs': {
                $each: newPlaylistSongs
            },
        },
    },
    {
        arrayFilters: [
            {
                'pl.playlistName':'playlist2',
            },
        ],
    }
)

Sample Mongo Playground