本页使用以下的MangoDB C#驱动程序方法:
此页上的示例使用清单集合。要创建或填充清单集合,请运行以下内容:
var documents = new[]
{
new BsonDocument
{
{ "item", "canvas" },
{ "qty", 100 },
{ "size", new BsonDocument { { "h", 28 }, { "w", 35.5 }, { "uom", "cm" } } },
{ "status", "A" }
},
new BsonDocument
{
{ "item", "journal" },
{ "qty", 25 },
{ "size", new BsonDocument { { "h", 14 }, { "w", 21 }, { "uom", "cm" } } },
{ "status", "A" }
},
new BsonDocument
{
{ "item", "mat" },
{ "qty", 85 },
{ "size", new BsonDocument { { "h", 27.9 }, { "w", 35.5 }, { "uom", "cm" } } },
{ "status", "A" }
},
new BsonDocument
{
{ "item", "mousepad" },
{ "qty", 25 },
{ "size", new BsonDocument { { "h", 19 }, { "w", 22.85 }, { "uom", "cm" } } },
{ "status", "P" }
},
new BsonDocument
{
{ "item", "notebook" },
{ "qty", 50 },
{ "size", new BsonDocument { { "h", 8.5 }, { "w", 11 }, { "uom", "in" } } },
{ "status", "P" } },
new BsonDocument
{
{ "item", "paper" },
{ "qty", 100 },
{ "size", new BsonDocument { { "h", 8.5 }, { "w", 11 }, { "uom", "in" } } },
{ "status", "D" }
},
new BsonDocument
{
{ "item", "planner" },
{ "qty", 75 },
{ "size", new BsonDocument { { "h", 22.85 }, { "w", 30 }, { "uom", "cm" } } },
{ "status", "D" }
},
new BsonDocument
{
{ "item", "postcard" },
{ "qty", 45 },
{ "size", new BsonDocument { { "h", 10 }, { "w", 15.25 }, { "uom", "cm" } } },
{ "status", "A" }
},
new BsonDocument
{
{ "item", "sketchbook" },
{ "qty", 80 },
{ "size", new BsonDocument { { "h", 14 }, { "w", 21 }, { "uom", "cm" } } },
{ "status", "A" }
},
new BsonDocument
{
{ "item", "sketch pad" },
{ "qty", 95 },
{ "size", new BsonDocument { { "h", 22.85 }, { "w", 30.5 }, { "uom", "cm" } } }, { "status", "A" } },
};
collection.InsertMany(documents);
更新集合中的文档
为了更新一个文档,MangGDB提供了更新操作符(如$set)来修改字段值。
若要使用更新运算符,请将表单的更新文档传递给Update方法:
{
<update operator> => { <field1> => <value1>, ... },
<update operator> => { <field2> => <value2>, ... },
...
}
某些更新操作符(如$SET)将在字段不存在时创建字段。有关详细信息,请参阅个人更新运算符引用。
更新单个文档
下面的示例使用清单收集中的IMongoCollection.UpdateOne()方法来更新第一个文档,其中项等于“paper”:
var filter = Builders<BsonDocument>.Filter.Eq("item", "paper");
var update = Builders<BsonDocument>.Update.Set("size.uom", "cm").Set("status", "P").CurrentDate("lastModified");
var result = collection.UpdateOne(filter, update);
更新操作:
- 使用
$set
操作符更新size.uom 字段值为
"cm"
并且 将status 字段值为
"P"
, - 使用
$currentDate
操作符更新lastModified
字段值为当前日期. 如果lastModified
字段不存在,$currentDate
将创建该字段.
更新多文档
以个示例使用 IMongoCollection.UpdateMany() 方法更新 inventory
集合中 qty
小于 50的文档
var filter = Builders<BsonDocument>.Filter.Lt("qty", 50);
var update = Builders<BsonDocument>.Update.Set("size.uom", "in").Set("status", "P").CurrentDate("lastModified");
var result = collection.UpdateMany(filter, update);
替换文档
用来替换除_id字段外的全部文档内容,将一个完整的新的文档做为第二个参数传给 IMongoCollection.ReplaceOne().
当替换文档时,替换文档内容必须是键/值对,即不能包含更新操作符表达式;
替换文档可以与原文档不同字段,在替换时,你可以省略_id字段,因为_id字段是不变的,但是,如果替换文档中包含了_id字段,那么其值必须与原文档一致;
下面的示例替换了从“inventory”集合中的第一个文档,条件是“item”:“paper”:
var filter = Builders<BsonDocument>.Filter.Eq("item", "paper");
var replacement = new BsonDocument
{
{ "item", "paper" },
{ "instock", new BsonArray
{
new BsonDocument { { "warehouse", "A" }, { "qty", 60 } },
new BsonDocument { { "warehouse", "B" }, { "qty", 40 } } }
}
};
var result = collection.ReplaceOne(filter, replacement);
行为
原子性
单文档的写操作都是原子性的,更多关于原子性的信息请查看 Atomicity and Transactions.