参考文档

注意

  • 使用use命令切换之前您无需创建数据库。当您第一次在数据库中存储数据时(例如在数据库中创建第一个集合),MongoDB会创建数据库
  • MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中
  • MongoDB向指定集合中插入文档时,如果指定集合不存在,MongoDB则会自动创建该集合
  • 在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id字段作为主键。 如果插入的文档省略_id字段,则MongoDB驱动程序会自动为_id字段生成ObjectId。
  • MongoDB中的所有写操作都是单个文档级别的原子操作
  • .NET CORE或更高版本请根据MongoDB版本安装 MongoDB.Driver Nuget包

新增

db.collection.insertOne()

插入一个文件

返回一个文档,其中包含新插入的文档的_id字段值

关于writeConcern请参考 https://mongoing.com/archives/2916

该操作不支持 db.collection.explain() 查询计划

语法
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
实例代码
  • MongoDB Shell
db.inventory.insertOne
(
{
item: "canvas",
qty: 100,
tags: ["cotton"],
size: { h: 28, w: 35.5, uom: "cm" }
}
)
  • C#
var document = new BsonDocument
{
{ "item", "canvas" },
{ "qty", 100 },
{ "tags", new BsonArray { "cotton" } },
{ "size", new BsonDocument { { "h", 28 }, { "w", 35.5 }, { "uom", "cm" } } }
};
collection.InsertOne(document);

db.collection.insertMany()

插入多个文件

返回包含新插入的文档_id字段值的文档

ordered表示是否按顺序执行插入操作,默认为true

顺序添加的速度要慢于不按顺序添加的。

按照顺序添加的 操作遇到错误会直接停止,而不按照顺序的会继续执行在队列中的写操作

语法
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
实例代码
  • MongoDB Shell
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
  • C#
var documents = new BsonDocument[]
{
new BsonDocument
{
{ "item", "journal" },
{ "qty", 25 },
{ "tags", new BsonArray { "blank", "red" } },
{ "size", new BsonDocument { { "h", 14 }, { "w", 21 }, { "uom", "cm"} } }
},
new BsonDocument
{
{ "item", "mat" },
{ "qty", 85 },
{ "tags", new BsonArray { "gray" } },
{ "size", new BsonDocument { { "h", 27.9 }, { "w", 35.5 }, { "uom", "cm"} } }
},
new BsonDocument
{
{ "item", "mousepad" },
{ "qty", 25 },
{ "tags", new BsonArray { "gel", "blue" } },
{ "size", new BsonDocument { { "h", 19 }, { "w", 22.85 }, { "uom", "cm"} } }
},
};
collection.InsertMany(documents);

db.collection.insert()

将单个文档或多个文档插入到集合中。该方法在MongoSH已被标记过期,不推荐使用。

语法
db.collection.insert(
<document or array of documents>, //数组或者文档都可以添加
{
writeConcern: <document>,
ordered: <boolean> //跟insertMany()操作作用一致
}
)
实例代码
  • MongoDB Shell
db.inventory.insert
(
{
item: "canvas",
qty: 100,
tags: ["cotton"],
size: { h: 28, w: 35.5, uom: "cm" }
}
)

db.collection.bulkWrite()

批量执行写入操作

operation 要执行的操作,可用值有insertOne,deleteOne,updateOne,deleteMany,updateMany,replaceOne

语法
db.collection.bulkWrite(
[ <operation 1>, <operation 2>, ... ],
{
writeConcern : <document>,
ordered : <boolean>
}
)
实例代码
  • MongoDB Shell
db.collection.bulkWrite( [
{ insertOne : { "document" : <document> } }
] )
  • C#
 var collection = db.GetCollection<Inventory>("test");
var requests = new List<WriteModel<Inventory>>()
{
new InsertOneModel<Inventory>(new Inventory()),
new InsertOneModel<Inventory>(new Inventory())
};
collection.BulkWrite(requests);

查询

查询全部

  • SQL
SELECT * FROM Inventory
  • MongoDB Shell
db.inventory.find( {} )
  • C#
var filter = Builders<BsonDocument>.Filter.Empty;
var result = collection.Find(filter).ToList();

条件查询

逻辑查询运算符

$and 使用逻辑AND连接查询子句,返回与这两个子句条件匹配的所有文档

$not 反转查询表达式的效果,并返回与查询表达式_不_匹配的文档。

$nor 用逻辑NOR连接查询子句,返回所有不能匹配这两个子句的文档。

$or 用逻辑OR连接查询子句,返回与任一子句条件匹配的所有文档

比较查询运算符

$eq 匹配等于指定值的值

$gt 匹配大于指定值的值

$gte 匹配大于或等于指定值的值

$in 匹配数组中指定的任何值

$lt 匹配小于指定值的值

$lte 匹配小于或等于指定值的值

$ne 匹配所有不等于指定值的值

$nin 不匹配数组中指定的任何值

更多其他运算符

https://docs.mongoing.com/can-kao/yun-suan-fu

  • 插入文档
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
  • SQL
SELECT * FROM Inventory WHERE status = "D"

SELECT * FROM inventory WHERE status in ("A", "D")

SELECT * FROM inventory WHERE status = "A" AND qty < 30

SELECT * FROM inventory WHERE status = "A" OR qty < 30

SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
  • MongoDB Shell

在对相同字段进行等值检索的时候更建议使用$in而不是$or

MongoDB支持正则表达式操作符$regex来做字符串模式匹配

db.inventory.find( {status:"D"} )

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

db.inventory.find( { status: "A", qty: { $lt: 30 } } )

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
  • C#
var filter = Builders<BsonDocument>.Filter.Eq("status", "D");
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.In("status", new[] { "A", "D" });
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(builder.Eq("status", "A"), builder.Lt("qty", 30));
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.Or(builder.Eq("status", "A"), builder.Lt("qty", 30));
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(
builder.Eq("status", "A"),
builder.Or(builder.Lt("qty", 30), builder.Regex("item", new BsonRegularExpression("^p"))));
var result = collection.Find(filter).ToList();

嵌套文档查询

  • 插入文档
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
  • MongoDB Shell

整个嵌入式文档上的相等匹配要求与指定的文档完全匹配,包括字段顺序。

要在嵌入式/嵌套文档中的字段上指定查询条件,请使用点符号(“ field.nestedField”)

db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )

db.inventory.find( { "size.uom": "in" } )

db.inventory.find( { "size.h": { $lt: 15 } } )

db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
  • C#
var filter = Builders<BsonDocument>.Filter.Eq("size", new BsonDocument { { "h", 14 }, { "w", 21 }, { "uom", "cm" } });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("size.uom", "in");
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Lt("size.h", 15);
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(builder.Lt("size.h", 15), builder.Eq("size.uom", "in"), builder.Eq("status", "D"));
var result = collection.Find(filter).ToList();

数组查询

  • 插入文档
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
  • MongoDB Shell

使用点运算符查询时,dim_cm.1 必须在双引号内

//顺序都必须一致才能查询出来
db.inventory.find( { tags: ["red", "blank"] } )
//查询tags中包含red和blank元素的文档,不考虑顺序
db.inventory.find( { tags: { $all: ["red", "blank"] } } )、
//查询所有文档中包含tags字段,如果tags为数组则查询数组中包含red元素的文档
db.inventory.find( { tags: "red" } )
//查询所有文档中包含dim_cm字段,如dim_cm为数组则查询数组里面存在大于25的元素的文档
db.inventory.find( { dim_cm: { $gt: 25 } } )
//查询dim_cm数组元素中存在大于15同时又存在小于20的文档
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
//查询dim_cm数组元素中至少存在一个大于22且小于30的文档
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
//查询dim_cm数组第二个元素大于25的相关文档
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
//查询tags数组长度为3的相关文档
db.inventory.find( { "tags": { $size: 3 } } )
  • C#
var filter = Builders<BsonDocument>.Filter.Eq("tags", new[] { "red", "blank" });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.All("tags", new[] { "red", "blank" });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("tags", "red");
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Gt("dim_cm", 25);
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(builder.Gt("dim_cm", 15), builder.Lt("dim_cm", 20));
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("dim_cm", new BsonDocument { { "$gt", 22 }, { "$lt", 30 } });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Gt("dim_cm.1", 25);
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Size("tags", 3);
var result = collection.Find(filter).ToList();

嵌套文档数组查询

  • 插入文档
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
  • MongoDB Shell
//查询instock数组包含指定元素的相关文档,顺序都必须一致才会匹配
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
//查询instock数组中存在qty字段小于等于20的元素的相关文档
db.inventory.find( { 'instock.qty': { $lte: 20 } } )
//查询instock数组中第一个元素qty字段小于等于20的相关文档
db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )
//查询instock数组元素中包含qty=5且warehouse=A的相关文档
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
//查询instock数组中至少存在一个qty字段大于10且小于等20的元素的相关文档(只能是同一个数组元素的qty字段)
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
//查询instock数组中存在qty字段大于10且小于20的元素相关的文档(可以是不同元素也可以是同一元素的qty字段)
db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )
//查询instock数组中存在qty字段等于10且warehouse等于A的元素相关的文档(可以是不同元素也可以是同一元素的qty字段)
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
  • C#
var filter = Builders<BsonDocument>.Filter.AnyEq("instock", new BsonDocument { { "warehouse", "A" }, { "qty", 5 } });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Lte("instock.qty", 20);
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Lte("instock.0.qty", 20);
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("instock", new BsonDocument { { "qty", 5 }, { "warehouse", "A" } });
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("instock", new BsonDocument { { "qty", new BsonDocument { { "$gt", 10 }, { "$lte", 20 } } } });
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(builder.Gt("instock.qty", 10), builder.Lte("instock.qty", 20));
var result = collection.Find(filter).ToList(); var builder = Builders<BsonDocument>.Filter;
var filter = builder.And(builder.Eq("instock.qty", 5), builder.Eq("instock.warehouse", "A"));
var result = collection.Find(filter).ToList();

查询指定字段

  • 插入文档
db.inventory.insertMany( [
{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
{ item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
  • SQL
SELECT _id, item, status from inventory WHERE status = "A"
SELECT item, status from inventory WHERE status = "A"
SELECT _id, size, item from inventory WHERE status = "A"
  • MongoDB Shell
//根据指定条件查询item,status字段(_id字段会默认返回)
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
//根据指定条件查询item,status字段
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
//除开status,instock其他都字段都返回
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
//返回_id,item,status和size中的uom字段
db.inventory.find(
{ status: "A" },
{ item: 1, status: 1, "size.uom": 1 }
)
//除开size中的uom字段,其他都返回
db.inventory.find(
{ status: "A" },
{ "size.uom": 0 }
)
//返回item,status,和instock数组中的qty字段
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
//返回item,status,和instock数组中的最后一个元素
db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )
  • C#
var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Include("item").Include("status");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Include("item").Include("status").Exclude("_id");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Exclude("status").Exclude("instock");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Include("item").Include("status").Include("size.uom");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Exclude("size.uom");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Include("item").Include("status").Include("instock.qty");
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList(); var filter = Builders<BsonDocument>.Filter.Eq("status", "A");
var projection = Builders<BsonDocument>.Projection.Include("item").Include("status").Slice("instock", -1);
var result = collection.Find<BsonDocument>(filter).Project(projection).ToList();

NULL和缺失字段查询

  • 插入文档
db.inventory.insertMany([
{ _id: 1, item: null },
{ _id: 2 }
])
  • MongoDB Shell

关于$type 请参考 https://docs.mongodb.com/v4.0/reference/bson-types/

关于$exists 请参考 https://docs.mongodb.com/v4.0/reference/operator/query/exists/#op._S_exists

//会查询出item为NULL和不存在item字段的文档
db.inventory.find( { item: null } )
//只会查询出包含item字段且值为NULL的文档
db.inventory.find( { item : { $type: 10 } } )
//只会查询出不包含item字段的文档
db.inventory.find( { item : { $exists: false } } )
  • C#

请使用BsonNull.Value去查询MongoDB中的NULL值和不存在的字段

var filter = Builders<BsonDocument>.Filter.Eq("item", BsonNull.Value);
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Type("item", BsonType.Null);
var result = collection.Find(filter).ToList(); var filter = Builders<BsonDocument>.Filter.Exists("item", false);
var result = collection.Find(filter).ToList();

修改

插入文档

db.inventory.insertMany( [
{ item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
{ item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
{ item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

db.inventory.updateOne()

更新单个文档

查找与过滤器匹配的第一个文档,并应用指定的更新进行修改。

语法
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
  • filter 更新的选择标准。可以使用与find()方法相同的query selectors。 指定一个空文档{ }以更新集合中的所有文档。
  • update 要应用的修改。可以是以下之一: 1. 更新文件:仅包含更新运算符表达式。有关更多信息,请参见 使用更新运算符表达式文档进行更新。 2. 聚合管道(从MongoDB 4.2开始):仅包含以下聚合阶段: a. $addFields及其别名 $set b. $project及其别名 $unset c. replaceRoot及其别名$replaceWith。
  • upsert 可选的。当true,updateOne()时: 1. 如果没有文档匹配filter,则创建一个新文档。 2. 更新匹配filter的文档。 要避免多次 upsert,请确保filter字段为唯一索引。 默认为false。
  • writeConcern 可选的。表示写关注的文件。省略使用默认写入问题。 如果在事务中运行,请不要为操作明确设置写关注点。
  • collation 可选的。 指定要用于操作的排序规则。 排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则
  • arrayFilters 可选的。过滤器文档的 array,用于确定要在 array 字段上为更新操作修改哪些 array 元素
  • hint 可选的。一个文档或字符串,它指定用于支持查询谓词的索引。 该选项可以采用索引规范文档或索引名称字符串。 如指定的索引不存在,则操作错误。
实例代码
  • MongoDB Shell
db.inventory.updateOne(
{ item: "paper" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)

使用$set 运算符将size.uom字段的值更新为“ cm”,将状态字段的值更新为“ P”

使用$currentDate运算符将lastModified字段的值更新为当前日期。 如果lastModified字段不存在,则$currentDate将创建该字段。

  • C#
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);

db.inventory.updateMany()

更新多个文档

语法
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
  • 参数解释同db.inventory.updateOne()
实例代码
  • MongoDB Shell
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
  • C#
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);

db.inventory.replaceOne()

替换文档

要替换_id字段以外的文档的全部内容,请将一个全新的文档作为第二个参数传递给

当替换一个文档时,替换文档必须只包含字段/值对;即不包括更新操作符表达式。

替换文档可以具有与原始文档不同的字段。在替换文档中,由于_id字段是不可变的,因此可以省略_id字段。但是,如果您确实包含_id字段,则它必须与当前值具有相同的值。

语法
db.collection.replaceOne(
<filter>,
<replacement>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
  • 参数解释同db.inventory.updateOne()
实例代码
  • MongoDB Shell
db.inventory.replaceOne(
{ item: "paper" },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
  • C#
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);

db.collection.update()

更新

该语法在.NET nuget包 MongoDB.Driver中并不存在对应方法

语法
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
  • multi 可选的。如果设置为true,则更新符合query条件的多个文档。如果设置为false,则更新一个文档。默认的 value 是false。
  • 其他同db.inventory.updateOne()
实例代码
  • MongoDB Shell
db.books.update(
{ stock: { $lte: 10 } },
{ $set: { reorder: true } },
{ multi: true }
)

其他方法

  • db.collection.findOneAndReplace()
  • db.collection.findOneAndUpdate()
  • db.collection.findAndModify()
  • db.collection.save()
  • db.collection.bulkWrite()

删除

插入文档

db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
] );

db.collection.deleteMany()

要删除集合中的所有文档,请将空的filter文档{}传递给db.collection.deleteMany() 方法

您可以指定标准或过滤器,以标识要删除的文档。 filter使用与读取操作相同的语法。

语法
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
  • 参数解释同db.inventory.updateOne()
实例代码
  • MongoDB Shell
db.inventory.deleteMany({})  

db.inventory.deleteMany({ status : "A" })
  • C#
var filter = Builders<BsonDocument>.Filter.Empty;
var result = collection.DeleteMany(filter); var builder = Builders<BsonDocument>.Filter;
builder.And(builder.Eq(<field1>, <value1>), builder.Lt(<field2>, <value2>));

db.collection.deleteOne()

仅删除一个符合条件的文档(即使多个文档可以与指定过滤器匹配)

实例代码
  • MongoDB Shell
db.inventory.deleteOne( { status: "D" } )
  • C#
var filter = Builders<BsonDocument>.Filter.Eq("status", "D");
var result = collection.DeleteOne(filter);

.NET中MongoDB之CRUD的更多相关文章

  1. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  2. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  3. MongoDB简单CRUD场景

    MongoDB简单CRUD命令操作 (1)新建数据库:use 数据库名 (2)显示所有数据库:show dbs; (3)新建集合(两种方式)  隐式创建:在创建集合的同时往集合里面添加数据---db. ...

  4. springboot连接mongodb进行CRUD

    springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...

  5. Node.js 中MongoDB的基本接口操作

    Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...

  6. Nodejs中Mongodb使用

    Mongodb使用 打开解压后的Mongodb文件夹,新建data.logs文件夹,并在logs文件夹中新建mongodb.log文档. 添加后Mongod文件夹示意图: 用cmd命令行启动Mongo ...

  7. Ubuntu中MongoDB安装

    在Ubuntu中MongoDB有时候启动不起来,可以参考以下方法从新安装: 1.导入包管理系统使用的公钥 Ubuntu 的软件包管理工具(即dpkg和APT)要求软件包的发布者通过GPG密钥签名来确保 ...

  8. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  9. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

随机推荐

  1. 【产品】如何写好APP描述

    你有没有想过越是需要花钱购买的 App,用户会更认真阅读你的 App描述?本文列举了15个 app 描述,看看哪些是我们以前忽略了的,哪些是我们也犯过的错误.图中有红色背景的文字是需要强调的地方,这些 ...

  2. [THUSCH2017] 杜老师

    description \(T\)次询问,每次问\(L,L+1...R\)有多少种子集满足子集中乘积为完全平方数. solution 50pt 首先双倍经验 通常的思路是:平方数即每个质因子指数为偶 ...

  3. C++编码规范(本人自定义)

    C++编码规范 1.变量名用camelCase命名法(即lowerCamelCase,小驼峰拼写法)命名. 即小写字母开头,如果变量名是复合词,第二个单词的首字母大写. 举例: int digitsC ...

  4. Servlet的本质

    简介:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 功能:使 ...

  5. springboot引入mybatis遇到的坑

      前边分享了springboot项目的创建及springboot项目的默认配置文件等,想温习的小伙伴可移步至文章末尾阅读,感谢.今天来分享下springboot引入mybatis框架的步骤,有小伙伴 ...

  6. Camunda如何适配国产数据库达梦

    前言 camunda流程引擎官方支持的数据库有:MySQL .MariaDB .Oracle .DB2 .PostgreSQL .SQL Server.H2.对于其他类型的数据库如何支持,尤其是国产数 ...

  7. .NET 6.0.6 和 .NET Core 3.1.26、Visual Studio 2022 17.2 和 17.3 Preview 2 和 .NET 7.0 Preview 5 同时发布

    Microsoft 昨天发布了适用于 .NET 6.0.6 和 .NET Core 3.1.26.NuGet.Visual Studio 2019 和 Visual Studio 2022 17.2 ...

  8. 从开发一款基于Vue技术栈的全栈热重载生产环境脚手架,我学到了什么

    浏览文章前 这一期,我分享给大家三点看源码的小技巧,这也是从别的大佬那总结的. 被反复使用的代码 这样的代码是一个软件的重点函数,一个大神的写法有很多精华值得学习. 穿越时间的代码 如果一段代码10年 ...

  9. 聊聊Adapter模式

    今天我们聊一个最简单的设计模式,适配器Adapter.跟以往一样,我们还是从一个例子出发. 一个例子 最开始的结构 假设我们有个数据分析软件,其中包含了数据收集器和数据分析器,数据收集器基于XML格式 ...

  10. HashMap1.8常见面试问题

    1.hashmap转红黑树的时机: for (int binCount = 0; ; ++binCount) { if ((e = p.next) == null) { p.next = newNod ...