MongoDB 查询和修改命令
一、MongoDB Insert 命令
Insert 命令 在集合中插入一个或多个文档,并返回一个包含所有输入状态的文档。insert 方法内部使用了 MongoDB 提供的 insert 命令。
语法:
{
insert: <collection>,
documents: [ <document>, <document>, <document>, ... ],
ordered: <boolean>,
writeConcern: { <write concern> },
bypassDocumentValidation: <boolean>
}
参数字段:
字段名 | 类型 | 描述 |
---|---|---|
insert | string | 它是我们要在其中插入元素的集合的名称。 |
documents | array | 它是我们要插入到集合中的文件数组 |
ordered | boolean | 如果它设置为 true,那么当插入操作失败时,它返回结果而不插入插入数组中列出的任何剩余文档,反之亦然 |
writeConcern | document | 它是一个定义插入命令的写关注点的文档。 |
bypass Document Validation |
boolean | 我们可以使用该字段插入不符合验证要求的文档。 |
示例:
让我们在 books 集合中插入一个文档:
db.runCommand(
{
insert: "books",
documents: [ { _id: 1, bookname: "MongoDB", status: "sold" } ]
}
)
二、MongoDB Delete 命令
我们可以使用 delete 命令从集合中删除任何文档。单个删除命令中有多个删除规范。我们不能在有上限的集合上使用它。delete 命令在内部由 MongoDB 提供的删除方法使用。
语法:
{
delete: <collection>,
deletes: [
{ q : <query>, limit : <integer>, collation: <document> },
{ q : <query>, limit : <integer>, collation: <document> },
{ q : <query>, limit : <integer>, collation: <document> },
...
],
ordered: <boolean>,
writeConcern: { <write concern> }
}
参数字段:
字段名 | 类型 | 描述 |
---|---|---|
delete | string | 它是我们要删除元素的目标集合的名称。 |
deletes | array | 它是我们要对其执行删除操作的删除语句数组。 |
ordered | boolean | 如果它设置为 true,那么当插入操作失败时,它返回结果而不插入插入数组中列出的任何剩余文档,反之亦然 |
writeConcern | document | 它是一个定义删除命令的写关注点的文档。 |
q | document | 它是匹配删除的查询。 |
limit | integer | 我们可以使用该字段限制匹配的文档删除。指定 0 以删除所有匹配的文档,反之亦然。 |
collation | document | 它是一个可选字段,用于定义用于操作的排序规则。 语法: collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } |
示例:
以下示例通过指定限制 2 从图书集合中删除状态等于 A 的文档。
db.runCommand(
{
delete: "books",
deletes: [ { q: { status: "A" }, limit: 1 } ]
}
)
三、MongoDB Update 命令
update 命令对集合中的文档进行更改。它包含多个更新语句。它由 MongoDB 驱动程序提供的更新方法使用。
语法:
db.runCommand(
{
update: <collection>,
updates: [
{
q: <query>,
u: <document or pipeline>, // Changed in MongoDB 4.2,
upsert: <boolean>,
multi: <boolean>,
collation: <document>,
arrayFilters: <array>,
hint: <document|string> // Available starting in MongoDB 4.2
},
...
],
ordered: <boolean>,
writeConcern: { <write concern> },
bypassDocumentValidation: <boolean>
}
)
参数字段:
字段名 | 类型 | 描述 |
---|---|---|
update | string | 它是我们要更新数组的目标集合的名称。 |
updates | array | 它是对给定集合执行更新操作的更新语句数组。 |
ordered | boolean | 如果设置为 true,则为可选字段。它将返回结果而不执行剩余的更新操作,反之亦然。 |
writeConcern | document | 它是一个表达更新命令的写关注的文档。它描述了从 MongoDB 请求的对独立 MongoDB 的写入操作的确认级别。 |
bypass Document Validation |
boolean | |
q | document | 它是与我们要更新的文档匹配的查询。 |
u | document | 它是存储更新运算符表达式的文档。 |
upsert | boolean | 如果此字段设置为 true,则如果没有文档与查询匹配,它将执行插入操作。 |
multi | boolean | 如果此字段设置为 true;它将更新所有符合查询条件的文档。 |
collation | document | 它为字符串比较指定了特定于语言的规则。 语法: collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } |
arrayfilters | array | 它是一个文档数组,描述了我们要修改哪些数组元素。 |
hint | string/ document |
它是一个文档,指定用于支持查询谓词的索引。 |
示例:
让我们创建一个学生的Collection:
Db.students.insertMany([
{ _id: 1, student: "john", status: "Pending", points: 0, misc1: "note to self: confirm status", misc2: "Need to activate" },
{ _id: 2, student: "Michael", status: "D", points: 59, misc1: "reminder: ping me at 100pts", misc2: "Some random comment" },
])
run 命令使用 $set 和 $inc 运算符来更新成员等于“john”的文档的状态。
db.runCommand(
{
update: "students",
updates: [
{
q: { student: "john" }, u: { $set: { status: "A" }, $inc: { points: 1 } }
}
],
ordered: false,
writeConcern: { w: "majority", wtimeout: 5000 }
}
)
四、MongoDB find 命令
find 命令用于执行查询并返回第一组结果和游标的 id,我们可以从中构造游标。
语法:
db.runCommand(
{
"find": <string>,
"filter": <document>,
"sort": <document>,
"projection": <document>,
"hint": <document or string>,
"skip": <int>,
"limit": <int>,
"batchSize": <int>,
"singleBatch": <bool>,
"comment": <string>,
"maxTimeMS": <int>,
"readConcern": <document>,
"max": <document>,
"min": <document>,
"returnKey": <bool>,
"showRecordId": <bool>,
"tailable": <bool>,
"oplogReplay": <bool>,
"noCursorTimeout": <bool>,
"awaitData": <bool>,
"allowPartialResults": <bool>,
"collation": <document>
}
)
参数字段:
字段名 | 类型 | 描述 |
---|---|---|
find | string | 在这个字段中,我们可以定义集合的名称。 |
filter | document | 它过滤查询。 |
sort | document | 它是一个包含查询排序详细信息的文档。 |
projection | document | 它是包含投影规范的文档,用于确定要在返回的文档中包含哪些字段。 |
hint | string | 它是一个将索引名称指定为字符串或索引键模式的文档。 |
skip | positive integer | 该文件包含要跳过的文档数。 |
limit | Non-negative integer | 我们可以设置要返回的最大文档数。 |
batchSize | Non-negative integer | 它包含我们希望在第一批中返回的文档数量。 |
singleBatch | boolean | 它包含在第一批结果后是否关闭游标的详细信息。 |
maxTimeMS | +ve integer | 我们可以设置对光标进行处理操作的时间限制。 |
readConcern | document | 它指定读取关注级别。
ReadConcern: { level: <value> } |
max | document | 它包含给定索引的上限。 |
min | boolean | 它包含给定索引的下限。 |
returnKey | boolean | 如果为真,则仅返回结果文档中的索引键。 |
showRecordID | boolean | 它用于返回每个文档的记录标识符。 |
tailable | boolean | 它为有上限的集合返回一个可尾游标。 |
awaitData | boolean | 它用于暂时阻止光标上的 getMore 命令。 |
oplogReplay | boolean | 它是用于重放副本集的 oplog 的命令。例如
{ find: "data", oplogReplay: true, filter: { ts: { $gte: new Timestamp(1514764800, 0) } } } |
noCursorTimeout | boolean | 该文件用于防止服务器超时空闲游标。 |
allowPartialResults | boolean | 如果某些分片不可用,此字段可防止引发错误。 |
collation | document | 它指定操作 语法的排序规则: collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } |
示例:
在下面的示例中,该命令按名称字段对结果集中的文档进行排序,并将结果集限制为六个文档。
db.runCommand(
{
find: "restaurants",
filter: { rating: { $gte: 9 }, cuisine: "American" },
projection: { name: 1, rating: 1, address: 1 },
sort: { name: 1 },
limit: 6
}
)
五、MongoDB findAndModify 命令
findAndModify 命令一次修改并返回一个文档。返回的文档默认不包含对更新所做的修改。我们需要使用新选项来返回修改后的文档。
语法:
{
findAndModify: <collection-name>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document or aggregation pipeline>, // Changed in MongoDB 4.2
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: <array>
}
参数字段:
字段名 | 类型 | 描述 |
---|---|---|
query | document | 查询字段包含与 db.collection.find() 方法中使用的相同的查询选择器。 |
sort | document | 它定义了文档的排序顺序。 |
remove | boolean | 此字段删除查询字段中指定的文档。 |
update | document/ array | 它将更新指定的文档。 |
new | boolean | 如果设置为 true,它将返回修改后的文档而不是原始文档。 |
fields | document | 它是要返回的字段的子集。它指定包含值为 1 的字段。
fields: { <field1>: 1, <field2>: 1, ... } |
upsert | boolean | 它与更新的字段一起使用。如果为真,它会创建一个新文档并更新与查询匹配的单个文档。此字段的默认值为 false。 |
bypass Document Validation |
boolean | 它使 findAndModify 能够在此过程中绕过文档验证。 |
writeConcern | document | 它是一个表达对命令的写关注的文档。 |
maxTimeMS | integer | 它声明了操作的时间限制。 |
FindAndModify | String | 该字段包含我们必须对其运行命令的集合。 |
collation | document | collation 字段允许用户为字符串比较指定特定于语言的规则。 语法: collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } |
arrayFilters | array | 过滤文档数组决定了哪些数组元素将被修改以进行更新操作。 |
示例:
db.runCommand(
{
findAndModify: "book",
query: { name: "MongoDB" },
sort: { rating: 4 },
update: { $inc: { price: 1 } },
upsert: true
}
)
热门文章
优秀文章