2

我一直在 MongoDB 上做实验。收集如下(样本)。项目这个,在这个类的第95DeleteAlbum行有这个功能。

{
    "_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"
        }
    ]
}

函数中的第 75 行Add方法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

删除嵌入文档的方法应该是什么?感谢您的帮助。

4

2 回答 2

4

以下是如何从Albums包含它的第一个文档的数组中删除一个元素_id(在 C# 中):

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
于 2013-01-19T01:44:38.890 回答
0

Mongo 不像 Linq-to-SQL 或实体框架。而不是调用 Artist.Albums.Remove(album) 然后尝试将对象的新状态保存到集合中,您需要调用集合的 .Remove() 函数。

本文展示了如何在 C# 中执行此操作:

如何使用 MongoDB 的官方 C# 驱动程序按“ID”删除一个“文档”?

于 2013-01-13T04:07:12.033 回答