这个符号是一个占位符,用来更新数组中匹配查询条件的第一个元素。例如,如果你想要更新 books 数组中 title 为”The Catcher in the Rye” 的元素的 author 字段,你可以使用以下代码:
1 2 3
var filter = Builders<BsonDocument>.Filter.Eq("books.title", "The Catcher in the Rye"); var update = Builders<BsonDocument>.Update.Set("books.$.author", "J.D. Salinger"); col.UpdateOne(filter, update);
var filter = Builders<BsonDocument>.Filter.Empty; var update = Builders<BsonDocument>.Update.Set("books.$[elem].discount", 0.8); var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("elem.price", new BsonDocument("$gt", 10))) }; col.UpdateMany(filter, update, new UpdateOptions { ArrayFilters = arrayFilters });
如果你想要替换数组 caricature 中 name 为 DeathNote 的元素的全部内容,用一个新的集合来代替,你可以使用以下代码来实现这个功能:
// 定义一个过滤条件,用来匹配你想要更新的文档的_id字段 var filter = Builders<BsonDocument>.Filter.Eq("_id", "01");
// 定义一个更新操作,用来替换caricature数组中name为DeathNote的元素 var update = Builders<BsonDocument>.Update.Set("caricature.$[elem]", newBook);
// 定义一个数组过滤条件,用来指定你想要替换的数组元素的name值 var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("elem.name", "DeathNote")) };
var filter = Builders<BsonDocument>.Filter.Empty; var update = Builders<BsonDocument>.Update.Pull("books", new BsonDocument("author", "J.D. Salinger")); col.UpdateOne(filter, update);
$pullAll
这个符号用来从数组中移除所有匹配指定值的元素。例如,如果你想要从 books 数组中移除 title 为”1984” 或”The Catcher in the Rye” 的元素,你可以使用以下代码:
1 2 3
var filter = Builders<BsonDocument>.Filter.Empty; var update = Builders<BsonDocument>.Update.PullAll("books", new BsonArray { new BsonDocument("title", "1984"), new BsonDocument("title", "The Catcher in the Rye") }); col.UpdateOne(filter, update);