我正在嘗試使用 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
uj5u.com熱心網友回復:
$each期望有一個array值。
$each: []
await playlist
.updateOne(
{},
{
$addToSet: {
'playlistArray.$[pl].playlistSongs': {
$each: newPlaylistSongs
},
},
},
{
arrayFilters: [
{
'pl.playlistName':'playlist2',
},
],
}
)
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442691.html
標籤:javascript 数组 json mongodb 猫鼬
