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 | collation 字段指定用于字符串比较的语言特定规则。 |
示例:
这些示例使用包含以下文档的集合库:
{ _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);
}
输出结果为:
热门文章
优秀文章