gpt4 book ai didi

c# - MongoDB C# : Update. pullAll 不删除项目

转载 作者:可可西里 更新时间:2023-11-01 10:06:30 28 4
gpt4 key购买 nike

我目前正在使用其 C# 驱动程序与 MongoDB 打交道,尝试 API 中的每种方法(如果他们提供一些例子,这会更好) 一个接一个。

目前我正在使用 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 对象完好无损。

谁能帮我指出我的代码哪里出错了?
非常感谢任何建议,谢谢。

最佳答案

要使 $pullAll 正常工作,您必须精确匹配整个对象,并且不能只使用一个字段(即使它被称为 _id)。

因此您必须在更新命令中也包含名称(并且字段也需要以相同的顺序排列)。

您真正想要使用的命令是 $pull,它会执行您在这里需要的操作,即匹配过滤条件:

In addition to matching an exact value you can also use expressions ($pull is special in this way).

即使它被称为“不带全部拉”,它确实会拉所有匹配的元素,而不仅仅是一个。 “全部”仅表示您有一个过滤器(而 pullAll 有多个要匹配的元素)。

关于c# - MongoDB C# : Update. pullAll 不删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com