簡體   English   中英

MongoDB嵌入式文檔刪除

[英]MongoDB embedded document delete

我一直在對MongoDB進行實驗。 收集如下( 樣本 )。 項目 ,在這個類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"
        }
    ]
}

第75行CreateAlbum函數中的Add方法正在工作。

 Artist.Albums.Add(Album)
 Return Collection.Save(Artist, SafeMode.True).Ok

但是DeleteAlbum Remove方法不起作用。

Artist.Albums.Remove(album)
Return Collection.Save(sanatci, SafeMode.True).Ok

刪除嵌入文檔應采用什么方法? 謝謝您的幫助。

以下是通過_id (在C#中)從包含該元素的第一個文檔的Albums數組中刪除元素的方法:

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

Mongo與Linq-to-SQL或Entity Framework不同。 您無需調用Artist.Albums.Remove(album),然后嘗試將對象的新狀態保存到集合中,而需要調用集合的.Remove()函數。

本文介紹了如何在C#中執行此操作:

如何使用MongoDB的官方C#驅動程序通過“ ID”刪除一個“文檔”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM