MongoDB-记录更新

本页使用以下的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.

猜你喜欢

转载自blog.csdn.net/baronyang/article/details/81238828