2

私はMongoDBで実験を行っています。コレクションは以下の通りです(サンプル)。Project thisこのクラスの 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 や Entity Framework とは異なります。Artist.Albums.Remove(album) を呼び出してからオブジェクトの新しい状態をコレクションに保存しようとする代わりに、コレクションの .Remove() 関数を呼び出す必要があります。

この記事では、C# でそれを行う方法を示します。

MongoDB の公式 C# ドライバーを使用して、「ID」ごとに 1 つの「ドキュメント」を削除する方法は?

于 2013-01-13T04:07:12.033 に答える