我的文档是:
{
"username": "erkin",
"email": "erkin-07@hotmail.com",
"password": "b",
"playlists": [
{
"_id": 58,
"name": "asdsa",
"date": "09-01-15",
"musics": [
{
"name": "INNA - Cola Song (feat. J Balvin)",
"duration": "3.00"
},
{
"name": "blabla",
"duration": "3.00"
}
]
}
]
}
我想在此播放列表部分添加音乐:
{
"username": "erkin",
"email": "erkin-07@hotmail.com",
"password": "b",
"playlists": [
{
"_id": 58,
"name": "asdsa",
"date": "09-01-15",
"musics": [
{
"name": "INNA - Cola Song (feat. J Balvin)",
"duration": "3.00"
},
{
"name": "blabla",
"duration": "3.00"
},
{
"name": "new",
"duration": "3.00"
}
]
}
]
}
这是什么我试过了:
$users->update(
array(
'_id' => new MongoId (Session::get('id')),
'playlists._id' => $playlistId
),
array(
'$push' => array('playlists.musics' => array(
'name' => 'newrecord',
'duration' => '3.00'
))
)
);
#1 楼
大概是这样的,其中ID是您的ObjectId。第一个{}是识别您的文档所必需的。只要您的集合中还有另一个唯一标识符,就不需要使用ObjectId。db.collection.update(
{ "_id": ID, "playlists._id": "58"},
{ "$push":
{"playlists.$.musics":
{
"name": "test name",
"duration": "4.00"
}
}
}
)
评论
你好您未指定播放列表_id。我每个用户都有多个播放列表
– Balkondemiri
2015年1月10日,11:41
@balkondemiri可能的。我无法测试它,所以这是一个猜测。但是,它应该将您带向正确的方向。
–托马斯·博曼斯
15年1月10日在18:36
Mongodb控制台说“例外:SyntaxError:意外令牌。” paste.ubuntu.com/9706780
– Balkondemiri
2015年1月10日在18:44
@balkondemiri就像我在这里所做的一样,需要“引用”“ playlists._id”键。这只是答案中的语法错误。优良作法是“引用”对象定义中的所有键。 JavaScript允许您执行不带引号的“有效”操作,但真正的JSON需要带引号的键。
–尼尔·伦(Neil Lunn)
2015年1月11日,下午1:27
谢谢大家。我更新查询。 {“ _id”:ObjectId(“ 54ad6c115e03635c0c000029”),“播放列表。_id”:58}
– Balkondemiri
2015年1月11日下午6:19
#2 楼
这样对我有用!“播放列表。$ []。musics”:
db.collection.update(
{ "_id": ID, "playlists._id": "58"},
{ "$push":
{"playlists.$[].musics":
{
"name": "test name",
"duration": "4.00"
}
}
}
)
https://docs.mongodb.com/manual/reference/operator / update / positional-filtered /#position-nested-arrays-filtered
评论
这会将新记录推送到“播放列表”实体的所有数组元素中。
–ersnh
18年11月20日在6:54
评论
只是为了向您介绍人们投票否决或投票关闭此处的原因。在您的问题中发布代码的相关部分。不要从外部进行链接(可能会中断),也不要让我们阅读冗长的清单只是为了弄清楚您在说什么。阅读此:stackoverflow.com/help/mcve