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 collat​​ion 字段允许用户为字符串比较指定特定于语言的规则。
语法:
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  
  }  
)  

 

热门文章

优秀文章