私は現在、C# ドライバーを使用して MongoDB をいじっており、APIの各メソッドを 1 つずつ試しています (いくつかの例が提供されていれば、はるかに優れています)。
そして現在、私はUpdate.PullAll()
メソッドに取り組んでいます。
テストにこの POCO オブジェクトを使用しています。
public class Person
{
public ObjectId Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public List<Skill> Skills { get; set; }
}
public class Skill
{
public Object Id { get; set; }
public string Name { get; set; }
}
設定されている場合、次の json オブジェクトに変換されます。
{
"_id": ObjectId("4f979621682dbc1a8cefecb3"),
"Firstname" : "John",
"Lastname" : "Doe",
"Skills" : [
{
"_id" : ObjectId("4f979621682dbc1a8cefecaf"),
"Name" : "C#.NET"
},
{
"_id" : ObjectId("4f979621682dbc1a8cefecb0"),
"Name" : "ASP.NET"
},
{
"_id" : ObjectId("4f979621682dbc1a8cefecb1"),
"Name" : "SQL Server"
}
]
}
今、スキル コレクションから要素を削除しようとしています。
これが私のコードです:
var server = MongoServer.Create("mongodb://localhost/?safe=true");
var db = server.GetDatabase("test");
var collection = db.GetCollection<Person>("person");
// Retrieve the data above from mongoDB
var _person = collection.AsQueryable()
.Select(p => p).Single();
// Query to reference "John Doe"
var query = Query.EQ("_id",new ObjectId(_person.Id.ToString()));
// Collection of "John Doe's" skill ids
var objIds = _person.Skills
.Select(p => new ObjectId(p.Id.ToString()));
// Parse the skill ids to a BsonArray
var bsonArray = BsonArray.Create(objIds);
var update = Update.PullAll("Skills" , bsonArray);
// Call the Update command
collection.Update( query, update );
これは何もしません。私のjsonオブジェクトはそのまま残ります。
コードのどこが間違っているか指摘してくれる人はいますか?
どんな提案でも大歓迎です、ありがとう。