📜  MongoDB Shell收集方法

📅  最后修改于: 2020-11-23 01:22:48             🧑  作者: Mango

MongoDB Shell收集方法

以下是在不同方案中使用的MongoDB收集方法。

#1:db.collection.aggregate(管道,选项)

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

管道:它是海量数据操作或阶段的数组。它可以接受管道作为单独的参数,而不是作为数组中的元素。如果未将管道指定为数组,则不会指定第二个参数。

选项:传递聚合命令的文档。仅当您将管道指定为数组时,它才可用。

命令字段:

Field Type Description
explain boolean The explain field specifies to return the information on the processing of the pipeline.
allowDiskUse boolean The allow disk use field enables you to write to temporary files.
cursor document The initial batch size for the cursor is specified with this field. The value inside this field is the document with the batchSize field.
maxTimeMS non-negative integer Use the time limit for the processing operations on a cursor is specified using this field.
bypassDocument Validation booleanThe $out or $merge aggregation stages can be specified using this field. It allows the aggregate collection method to bypass the document validation during the operation.
readConcern document You can specify the read concern level using this field.
collation document The collation field specifies the language specific rules for string comparison.

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

{ _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 } } );

#2 db.collection.bulkWrite()

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

句法:

db.collection.bulkWrite(
   [ , , .. ],
   {
      writeConcern : ,
      ordered: 
   }
)

输出:

执行作业

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

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

更新一个:仅更新一个与集合中的过滤器匹配的文档。

db.collection.bulkWrite( [
   { updateOne :
      {
         "filter": ,
         "update": ,
         "upsert": ,
         "collation": ,
         "arrayFilters": [ , ... ],
         "hint": 
      }
   }
] )

输出:

多次更新:更新集合中所有与过滤器匹配的文档。

db.collection.bulkWrite( [
   { updateMany :{
         "filter" : ,
         "update" : ,          
         "upsert" : ,
         "collation": ,           
         "arrayFilters": [ , ... ], 
         "hint":                    // Available starting in 4.2.1
      }
   }
] )

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

db.collection.bulkWrite([
{ replaceOne :
 {
    "filter" : ,
     "replacement" : ,
     "upsert" : ,
     "collation": ,
     "hint": 
   }
 }
] )

#3. db.collection.count(查询,选项)

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

例:

我们将使用以下操作对javaTpoint集合中的所有文档进行计数:

db.javaTpoint.count()

现在,我们将计算javaTpoint集合中与查询匹配的所有文档,其中tut_dt字段大于新日期('01 / 01/2015')

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

输出:

#4。 db.collection.countDocuments(查询,选项)

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

句法:

db.collection.countDocuments( ,  )

例子:

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

db.javaTpoint.countDocuments({})

现在,我们将计算javaTpoint集合中与查询匹配的所有文档,其中tut_dt字段大于新日期('01 / 01/2015')

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

#5。 db.collection.estimatedDocumentCount()

EstimatedDocumentCount()方法对集合或视图中的所有文档进行计数。此方法包装count命令。

句法:

db.collection.estimatedDocumentCount(  )

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

db.javaTpoint.estimatedDocumentCount({})

#6。 db.collection.createIndex()

它可以在集合上创建索引

句法:

db.collection.createIndex(keys, options)

键:对于字段上的升序索引,我们需要指定值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 } }
)

#7。 db.collection.createIndexes()

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

句法:

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

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

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

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

输出:

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

  • 在制造商字段中按升序索引。
  • 在类别字段上按升序索引。

上面的索引使用归类,将基本fr和比较强度指定为2。

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

#8。 db.collection.dataSize()

数据大小方法在collStats(即db.collection.stats())命令的输出中有一个封面。

#9。 db.collection.deleteOne()

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

句法:

db.collection.deleteOne(
   ,
   {
      writeConcern: ,
      collation: 
   }
)

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

{
   _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: "JavaTpoint"
}

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

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

输出: