MongoDB Shell Collection方法

以下是在不同场景中使用的 MongoDB 集合方法。

一、db.collection.aggregate(pipeline, option)

aggregate 聚合方法计算集合/表或视图中数据的质量值。

参数说明:

  • pipeline:它是一组海量数据操作或阶段。它可以接受管道作为单独的参数,而不是作为数组中的元素。如果管道未指定为数组,则不会指定第二个参数。
  • option:传递聚合命令的文档。仅当您将管道指定为数组时,它才可用。

命令字段:

字段名 类型 描述
explain boolean explain 字段指定返回有关管道处理的信息。
allowDiskUse boolean 允许磁盘使用字段使您能够写入临时文件。
cursor document 游标的初始批量大小由该字段指定。此字段内的值是具有 batchSize 字段的文档。
maxTimeMS non-negative integer 使用该字段指定对游标进行处理操作的时间限制。
bypassDocument Validation boolean 可以使用此字段指定 $out 或 $merge 聚合阶段。它允许聚合收集方法在操作期间绕过文档验证。
readConcern document 您可以使用此字段指定读取关注级别。
collation document collat​​ion 字段指定用于字符串比较的语言特定规则。

示例:

这些示例使用包含以下文档的集合库:

{ _id: 1, book_id: "Java", ord_date: ISODate("2012-11-02T17:04:11.102Z"), status: "A", amount: 50 }  
{ _id: 0, book_id: "MongoDB", ord_date: ISODate("2013-10-01T17:04:11.102Z"), status: "A", amount: 100 }  
{ _id: 0.01, book_id: "DBMS", ord_date: ISODate("2013-10-12T17:04:11.102Z"), status: "D", amount: 25 }  
{ _id: 2, book_id: "Python", ord_date: ISODate("2013-10-11T17:04:11.102Z"), status: "D", amount: 125 }  
{ _id: 0.02, book_id: "SQL", ord_date: ISODate("2013-11-12T17:04:11.102Z"), status: "A", amount: 25 }  

计算总和:

db.library.aggregate([  
                     { $match: { status: "A" } },  
                     { $group: { _id: "$book_id", total: { $count: "$amount" } } },  
                     { $sort: { total: -1 } }  
                   ])  

输出结果:

指定排序规则:

db.library.aggregate(  
   [ { $match: { status: "A" } }, { $group: { _id: "$ord_date", count: { $count: 1 } } } ],  
   { library: { locale: "fr", strength: 1 } } );  

二、db.collection.bulkWrite()

bulkWrite() 方法按照执行控制的顺序执行多个写入操作。写操作数组由该操作执行。默认情况下,操作按特定顺序执行。

语法:

db.collection.bulkWrite(  
   [ <op. 1>, <op. 2>, .. ],  
   {  
      writeConcern : <document>,  
      ordered: <boolean>  
   }  
)  

输出结果为:

执行操作

insertOne:它只将一个文档插入到集合中。

db.collection.bulkWrite( [  
   { insertOne : { "document" : <document> } }  
] )  

Update one:它只更新一个与集合中的过滤器匹配的文档。

db.collection.bulkWrite( [  
   { updateOne :  
      {  
         "filter": <document>,  
         "update": <document or pipeline>,  
         "upsert": <boolean>,  
         "collation": <document>,  
         "arrayFilters": [ <filterdocument1>, ... ],  
         "hint": <document|string>  
      }  
   }  
] )  

输出结果为:

Update Many: 它更新集合中所有过滤器匹配的文档。

db.collection.bulkWrite( [  
   { updateMany :{  
         "filter" : <doc.>,  
         "update" : <document or pipeline>,            
         "upsert" : <Boolean>,  
         "collation": <document>,             
         "arrayFilters": [ <filterdocument1>, ... ],   
         "hint": <document|string>                   // Available starting in 4.2.1  
      }  
   }  
] )  

replaceOne: 它替换集合中与过滤器匹配的单个文档。

db.collection.bulkWrite([  
{ replaceOne :  
 {  
    "filter" : <doc.>,  
     "replacement" : <doc.>,  
     "upsert" : <boolean>,  
     "collation": <document>,  
     "hint": <document|string>  
   }  
 }  
] )  

三、db.collection.count(query, option)

count() 方法返回与集合或视图的 find 方法查询匹配的文档数。

示例:

我们将使用以下操作计算 yiidian 集合中的所有文档:

db.yiidian.count()  

现在,我们将统计在 yiidian 集合中匹配 Query 且字段 tut_dt 大于 new Date ('01/01/2015') 的所有文档

db.yiidian.count( { tut_dt: { $gt: new Date('01/01/2015') } } )  

输出结果为:

四、db.collection.countDocuments(query, options)

countDocument() 方法返回与集合或视图的查询匹配的文档数。它不使用元数据返回计数。

语法:

db.collection.countDocuments( <query>, <options> )  

示例:

下面的示例将计算 yiidian 集合中所有文档的数量。

db.yiidian.countDocuments({})  

现在,我们将统计在 yiidian 集合中匹配 Query 且字段 tut_dt 大于 new Date ('01/01/2015') 的所有文档

db.yiidian.countDocuments( { tut_dt: { $gt: new Date('01/01/2015') } } )  

五、db.collection.estimatedDocumentCount()

estimatedocumentCount() 方法计算集合或视图中的所有文档。此方法包装了 count 命令。

语法:

db.collection.estimatedDocumentCount( <options> )  

以下示例将检索yiidian中所有文档的计数:

db.yiidian.estimatedDocumentCount({})  

六、db.collection.createIndex()

它可以在集合上创建索引

语法:

db.collection.createIndex(keys, options)  

keys:对于字段的升序索引,我们需要指定值 1,对于降序索引,我们需要指定值 -1。

示例:

下面的示例在字段 tut_Date 上创建升序索引。

db.collection.createIndex( { tut_Date: 1 } )  

以下示例显示了在 tut_Date 字段和 tut_code 字段上创建的复合索引。

db.collection.createIndex( { tut_Date: 1, tut_code: -1 } )  

下面的示例将创建一个名为 category_tutorial 的索引。该示例使用指定区域设置 fr 和比较强度的排序规则创建索引。

db.collection.createIndex(  
   { category: 1 },  
   { name: "category_tutorial", collation: { locale: "fr", strength: 2 } }  
)  

七、db.collection.createIndexes()

createIndexes() 方法在集合上创建一个或多个索引。

语法:

db.collection.createIndexes( [keyPatterns, ]options)  

Keypatterns:它是一个包含索引特定文档的数组。所有文档都有字段值对。对于字段的升序索引,我们需要指定值 1,对于降序索引,我们需要指定值 -1

示例:

在下面的示例中,我们考虑了一个包含类似于以下文档的员工集合:

{  
   location: {  
      type: "Point",  
      coordinates: [-73.8577, 40.8447]  
   },  
   name: "Employee",  
   company: "Amazon",  
   borough: "CA",  
}  

输出结果为:

现在,下面的示例在 products 集合上创建了两个索引:

  • 制造商字段上按升序排列的索引。
  • 按升序排列类别字段的索引。

上述索引使用了一个排序规则,将基本 fr 和比较强度指定为 2。

db.products.createIndexes( [ { "manufacturer": 1}, { "category": 1 } ],  
   { collation: { locale: "fr", strength: 2 } })  

八、db.collection.dataSize()

数据大小方法覆盖了 collStats(即 db.collection.stats() )命令的输出。

九、db.collection.deleteOne()

deleteOne() 方法从集合中删除一个文档。它替换了与过滤器类似的第一个文档。您需要使用与唯一索引相关的字段,例如 id 进行完美删除。

语法:

db.collection.deleteOne(  
   <filter>,  
   {  
      writeConcern: <document>,  
      collation: <document>  
   }  
)  

示例:

订单集合具有以下结构的文档:

{  
   _id: objectId("563237a41a4d6859da"),  
   book: "",  
   qty: 2,  
   type: "buy-limit",  
   limit: 10,  
   creationts: ISODate("2015-11-01T2:30:15Z"),  
   expiryts: ISODate("2015-11-01T2:35:15Z"),  
   client: "yiidian"  
}  

以下操作删除带有_id的订单:objectId("563237a41a4d6858 2da"):

try {  
   db.orders.deleteOne( { "_id" : objectId("563237a41a4d68582da") } );  
} catch (e) {  
   print(e);  
}  

输出结果为:

热门文章

优秀文章