📅  最后修改于: 2020-11-23 01:22:48             🧑  作者: Mango
以下是在不同方案中使用的MongoDB收集方法。
聚合方法为集合/表或视图中的数据计算质量值。
管道:它是海量数据操作或阶段的数组。它可以接受管道作为单独的参数,而不是作为数组中的元素。如果未将管道指定为数组,则不会指定第二个参数。
选项:传递聚合命令的文档。仅当您将管道指定为数组时,它才可用。
命令字段:
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 } } );
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":
}
}
] )
count()方法返回与集合或视图的find方法查询匹配的文档数。
例:
我们将使用以下操作对javaTpoint集合中的所有文档进行计数:
db.javaTpoint.count()
现在,我们将计算javaTpoint集合中与查询匹配的所有文档,其中tut_dt字段大于新日期('01 / 01/2015')
db.javaTpoint.count( { tut_dt: { $gt: new Date('01/01/2015') } } )
输出:
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') } } )
EstimatedDocumentCount()方法对集合或视图中的所有文档进行计数。此方法包装count命令。
句法:
db.collection.estimatedDocumentCount( )
例
以下示例将检索javaTpoint集合中所有文档的计数:
db.javaTpoint.estimatedDocumentCount({})
它可以在集合上创建索引
句法:
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 } }
)
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 } })
数据大小方法在collStats(即db.collection.stats())命令的输出中有一个封面。
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);
}
输出: