MongoDB 查询和写入操作命令
MongoDB插入命令
它在集合中插入一个或多个文档,并返回一个包含所有输入状态的文档。插入方法在内部使用MongoDB提供的插入命令。
语法:
{
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 | 我们可以使用此字段插入不符合验证要求的文档。 |
示例:
让我们将一个文档插入到图书集合中:
db.runCommand(
{
insert: "books",
documents: [ { _id: 1, bookname: "MongoDB", status: "sold" } ]
}
)
MongoDB删除命令
我们可以使用删除命令从集合中删除任何文档。在单个删除命令中有多个删除规范。我们不能在固定集合上使用它。删除命令是由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 | 它是一个由delete语句组成的数组,我们要在其中执行delete操作. |
ordered | boolean | 如果设置为true,那么当插入操作失败时,它将返回结果,而不会插入insert数组中列出的任何剩余文档,反之亦然 |
writeConcern | document | 它是一个定义了delete命令的写关注点的文档. |
q | document | 它是匹配要删除的查询. |
limit | integer | 我们可以使用这个字段限制匹配的文档为delete。指定0表示删除所有匹配的文档,反之亦然. |
collation | document | 它是一个可选字段,用于定义操作使用的排序规则. |
示例:
下面的示例通过指定限制为2,删除了书籍集合中状态等于A的文档。
db.runCommand(
{
delete: "books",
deletes: [ { q: { status: "A" }, limit: 1 } ]
}
)
MongoDB 更新命令
更新命令对集合中的文档进行更改。它包含多个更新语句。它由 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 | 它是对给定集合执行更新操作的update语句数组. |
ordered | boolean | 如果设置为true,它就是一个可选字段。它将返回结果而不执行剩余的更新操作,反之亦然. |
writeConcern | document | 它是一个文档,表达update命令的写关注。它描述了MongoDB对独立MongoDB的写操作请求的确认级别. |
bypass Document Validation | boolean | 它使更新操作可以绕过文档验证 |
q | document | 它是与我们想要更新的文档匹配的查询. |
u | document | 它是存储更新操作符表达式的文档. |
upsert | boolean | 如果该字段设置为true,那么如果没有文档与查询匹配,则执行插入操作. |
multi | boolean | 这个字段被设置为true;它将更新所有满足查询条件的文档 |
collation | document | 它指定了特定于语言的字符串比较规则 |
arrayfilters | array | 它是一个文档数组,描述了我们想要修改的数组元素. |
hint | string/ document | 它是一个文档,指定用于支持查询谓词的索引. |
示例:
让我们创建一个学生集合
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" },
])
运行命令使用 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命令用于执行查询,并返回结果的第一组和光标的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 | 正整数 | 此字段包含要跳过的文档数量。 |
limit | 非负整数 | 我们可以设置要返回的最大文档数。 |
batchSize | 非负整数 | 它包含我们希望在第一批中返回的文档数量。 |
singleBatch | boolean | 它包含是否在第一批结果之后关闭游标的详细信息。 |
maxTimeMS | 正整数 | 我们可以为游标上的处理操作设置时间限制。 |
readConcern | document | 它指定了读取关注级别。 |
max | document | 它包含了给定索引的上限。 |
min | boolean | 它包含了给定索引的下限。 |
returnKey | boolean | 如果为真,则只返回结果文档中的索引键。 |
showRecordID | boolean | 用于返回每个文档的记录标识符。 |
tailable | boolean | 为受限制的集合返回一个可追溯的游标。 |
awaitData | boolean | 用于临时阻塞游标上的getMore命令。 |
oplogReplay | boolean | 用于重放副本集的oplog的命令。 |
noCursorTimeout | boolean | 防止服务器超时空闲游标。 |
allowPartialResults | boolean | 如果某些分片不可用,防止抛出错误的字段。 |
collation | document | 指定操作的排序规则 |
示例:
在下面的示例中,该命令按名称字段对结果集中的文档进行排序,并限制结果集为六个文档。
db.runCommand(
{
find: "restaurants",
filter: { rating: { $gte: 9 }, cuisine: "American" },
projection: { name: 1, rating: 1, address: 1 },
sort: { name: 1 },
limit: 6
}
)
MongoDB查找并修改命令
它一次修改并返回一个文档。默认情况下,返回的文档不包括更新所做的修改。我们需要使用new选项来返回修改后的文档。
语法:
{
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 | query字段包含的查询选择器与db.collection.find()方法中使用的相同. |
sort | document | 它定义了文档的排序顺序. |
remove | boolean | 该字段删除在query字段中指定的文档. |
update | document/ array | 它将更新指定的文档. |
new | boolean | 如果设置为true,它将返回修改后的文档,而不是原始文档. |
fields | document | 它是要返回的字段的子集。它指定包含值为1的字段。字段:{<field1>: 1, <field2>: 1,…} |
upsert | boolean | 它与更新的字段一起使用。如果为真,则创建一个新文档并更新与查询匹配的单个文档。这个字段的默认值是false. |
bypass Document Validation | boolean | 它使findmodify在处理过程中绕过文档验证 |
writeConcern | document | 它是一个文档,表达了对命令的写关注 |
maxTimeMS | integer | 它声明了操作的时间限制. |
FindAndModify | String | 这个字段包含我们要针对它运行命令的集合. |
collation | collation | 字段允许用户指定字符串比较的语言特定规则。 |
arrayFilters | array | 这是一个过滤文档数组,用于确定更新操作中将修改哪些数组元素。 |
示例:
db.runCommand(
{
findAndModify: "book",
query: { name: "MongoDB" },
sort: { rating: 4 },
update: { $inc: { price: 1 } },
upsert: true
}
)