嵌套数组中的Mongodb $push
Posted
技术标签:
【中文标题】嵌套数组中的Mongodb $push【英文标题】:Mongodb $push in nested array 【发布时间】:2020-12-13 22:49:14 【问题描述】:我想在我的嵌套数组中添加新数据
我的文件是:
"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'
))
)
);
【问题讨论】:
只是为了让您了解人们在此处投票或投票关闭的原因。在您的问题中发布代码的相关部分。不要进行外部链接(可能会中断),也不要让我们阅读冗长的列表来弄清楚您在说什么。阅读:***.com/help/mcve 【参考方案1】:可能是这样的,其中 ID 是您的 ObjectId。第一个 是识别您的文档所必需的。只要您的集合中有另一个唯一标识符,就不需要使用 ObjectId。
db.collection.update(
"_id": ID, "playlists._id": "58",
"$push":
"playlists.$.musics":
"name": "test name",
"duration": "4.00"
)
【讨论】:
嗨。您没有指定播放列表 _id。我每个用户都有多个播放列表 @balkondemiri 这可能。我无法测试它,所以这是一个猜测。尽管如此,它应该会让你朝着正确的方向前进。 Mongodb 控制台说“异常:SyntaxError: Unexpected token 。” paste.ubuntu.com/9706780 @balkondemiri"playlists._id"
键需要像我在这里所做的那样被“引用”。这只是答案中的语法错误。 “引用”对象定义中的所有键是一种很好的做法。 javascript 允许你在没有引号的情况下做“有效”的事情,但真正的 JSON 需要带引号的键。
谢谢大家。我更新我的查询。 "_id": ObjectId("54ad6c115e03635c0c000029"), "playlists._id": 58【参考方案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
【讨论】:
这会将新记录推送到“播放列表”实体的所有数组元素中。以上是关于嵌套数组中的Mongodb $push的主要内容,如果未能解决你的问题,请参考以下文章