我一直在MongoDB上做实验。收集如下(sample)。
项目this位于this类第95 DeleteAlbum
行中,具有以下功能。
{
"_id": {
"$oid": "50e34afce4b0bc114fea2a7e"
},
"Ad": "Tarkan", //Artist
"Albums": [
{
"_id": {
"$oid": "50e34afce4b0bc114fea2a4e"
},
"Isim": "DUDU", //Name
"Yil": 2005, //Year
"Resim": "http://www.gercekpop.com/wp-content/uploads/2003/12/tarkan-dudu.jpg" //Image
},
{
"_id": {
"$oid": "50e34afce4b0bc114fea2a3e"
},
"Isim": "Kuzu Kuzu",
"Yil": 2008,
"Resim": "http://o.scdn.co/300/bf6423177c32224f25dc742f3ffe5450e441d68d"
}
]
}
Add
函数中的第75行CreateAlbum
方法正在运行。
Artist.Albums.Add(Album)
Return Collection.Save(Artist, SafeMode.True).Ok
但Remove
中的DeleteAlbum
方法不起作用。
Artist.Albums.Remove(album)
Return Collection.Save(sanatci, SafeMode.True).Ok
删除嵌入文档的方法应该是什么? 谢谢你的帮助。
答案 0 :(得分:4)
以下是如何从Albums
(在C#中)中删除包含它的第一个文档的_id
数组中的元素:
var query = Query.EQ("Albums._id", new ObjectId("50e34afce4b0bc114fea2a4e"));
var update = Update.Pull("Albums", new BsonDocument(){
{ "_id", new ObjectId("50e34afce4b0bc114fea2a4e") }
});
collection.Update(query, update);
我不熟悉VB,但你的DeleteAlbum
方法应改为:
Public Function DeleteAlbum(Artist As Sanatci, album As Album) As Boolean
Try
Return Collection.Update(
Query.EQ("Albums._id", album._id),
Update.Pull("Albums", Query.EQ("_id", album._id)), SafeMode.True
).Ok
Catch ex As MongoCommandException
Dim msgLog As String = ex.Message
Return False
End Try
End Function
答案 1 :(得分:0)
Mongo与Linq-to-SQL或Entity Framework不同。而不是调用Artist.Albums.Remove(相册),然后尝试将对象的新状态保存到集合中,您需要调用集合的.Remove()函数。
本文介绍了如何在C#中执行此操作:
How to remove one 'document' by 'ID' using the Official C# Driver for MongoDB?