猫鼬将每个对象推入数组
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',
},
],
}
)
我正在尝试使用 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',
},
],
}
)