MongoDB C# 驱动教程
- 格式:doc
- 大小:670.06 KB
- 文档页数:89
mongodb count函数MongoDB是一种流行的NoSQL数据库,它提供了丰富的功能和灵活的数据模型。
在MongoDB中,count函数是一种非常常用的方法,用于计算集合中满足特定条件的文档数量。
本文将详细介绍count 函数的用法和一些注意事项。
一、count函数的基本用法在MongoDB中,可以使用count函数来计算集合中满足特定条件的文档数量。
count函数的语法如下:db.collection.count(query, options)其中,query参数用于指定查询条件,options参数用于指定一些额外的选项。
例如,我们有一个名为users的集合,其中包含了很多用户的信息。
如果我们想要计算集合中年龄大于等于18岁的用户数量,可以使用如下的count函数调用:ers.count({ age: { $gte: 18 } })这样就可以得到满足条件的文档数量。
二、count函数的选项在count函数中,还可以使用一些选项来扩展其功能。
1. limit选项:限制count函数返回的结果数量。
例如,如果我们只想知道满足条件的前10个文档的数量,可以使用如下的count函数调用:ers.count({ age: { $gte: 18 } }, { limit: 10 })2. skip选项:跳过指定数量的文档后再计算数量。
例如,如果我们想要计算满足条件的第11个文档之后的文档数量,可以使用如下的count函数调用:ers.count({ age: { $gte: 18 } }, { skip: 10 })3. hint选项:指定索引来提高查询性能。
在某些情况下,使用hint 选项可以加快count函数的执行速度。
例如,如果我们有一个名为age的索引,并且想要使用该索引来提高查询性能,可以使用如下的count函数调用:ers.count({ age: { $gte: 18 } }, { hint: "age" })三、count函数的注意事项在使用count函数时,需要注意以下几点:1. count函数返回的是满足条件的文档数量,并不会返回文档本身。
Mongodb启动命令mongod参数说明1. MongoDB的获取和安装(2)解压 mongodb-win32-i386-1.8.1(3)创建数据存放⽂件夹,mongodb默认的数据⽬录 /data/dbC:/> mkdir /dataC:/> mkdir /data/db(4)运⾏ MongoDBmongod.exe - 数据库的服务器端,相当于mysql的 mysqld命令,启动服务器端mongo.exe - 数据库的客户端,相当于mysql的mysql命令,打开管理控制台启动服务mongod.exe --dbpath F:/DataBase/MongoDB/db/--dbpath 数据⽂件存放路径--port 数据服务端⼝C:/> cd /my_mongo_dir/binC:/my_mongo_dir/bin > mongod //启动mongod 服务器,默认的数据库路径 /data/db,端⼝27071启动客户端mongo.exe cclovecclove 所连接的数据库名称C:/> cd /my_mongo_dir/binC:/my_mongo_dir/bin> mongo2. 熟悉MongoDB的数据操作语句,类sql数据库操作语法mongo --pathdb.AddUser(username,password) 添加⽤户db.auth(usrename,password) 设置数据库连接验证db.cloneDataBase(fromhost) 从⽬标服务器克隆⼀个数据库mandHelp(name) returns the help for the commanddb.copyDatabase(fromdb,todb,fromhost) 复制数据库fromdb---源数据库名称,todb---⽬标数据库名称,fromhost---源数据库服务器地址db.createCollection(name,{size:3333,capped:333,max:88888}) 创建⼀个数据集,相当于⼀个表db.currentOp() 取消当前库的当前操作db.dropDataBase() 删除当前数据库db.eval(func,args) run code server-sidedb.getCollection(cname) 取得⼀个数据集合,同⽤法:db['cname'] or amedb.getCollenctionNames() 取得所有数据集合的名称列表db.getLastError() 返回最后⼀个错误的提⽰消息db.getLastErrorObj() 返回最后⼀个错误的对象db.getMongo() 取得当前服务器的连接对象get the server connection objectdb.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair db.getName() 返回当操作数据库的名称db.getPrevError() 返回上⼀个错误对象db.getProfilingLevel() ?什么等级db.getReplicationInfo() ?什么信息db.getSisterDB(name) get the db at the same server as this onewdb.killOp() 停⽌(杀死)在当前库的当前操作db.printCollectionStats() 返回当前库的数据集状态db.printReplicationInfo()db.printSlaveReplicationInfo()db.printShardingStatus() 返回当前数据库是否为共享数据库db.removeUser(username) 删除⽤户db.repairDatabase() 修复当前数据库db.resetError()db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {cmdObj:1} db.setProfilingLevel(level) 0=off,1=slow,2=alldb.shutdownServer() 关闭当前服务程序db.version() 返回当前程序的版本信息数据集(表)操作语法db.linlin.find({id:10}) 返回linlin数据集ID=10的数据集db.linlin.find({id:10}).count() 返回linlin数据集ID=10的数据总数db.linlin.find({id:10}).limit(2) 返回linlin数据集ID=10的数据集从第⼆条开始的数据集db.linlin.find({id:10}).skip(8) 返回linlin数据集ID=10的数据集从0到第⼋条的数据集db.linlin.find({id:10}).limit(2).skip(8) 返回linlin数据集ID=1=的数据集从第⼆条到第⼋条的数据db.linlin.find({id:10}).sort() 返回linlin数据集ID=10的排序数据集db.linlin.findOne([query]) 返回符合条件的⼀条数据db.linlin.getDB() 返回此数据集所属的数据库名称db.linlin.getIndexes() 返回些数据集的索引信息db.linlin.group({key:...,initial:...,reduce:...[,cond:...]})db.linlin.mapReduce(mayFunction,reduceFunction,<optional params>)db.linlin.remove(query) 在数据集中删除⼀条数据db.linlin.renameCollection(newName) 重命名些数据集名称db.linlin.save(obj) 往数据集中插⼊⼀条数据db.linlin.stats() 返回此数据集的状态db.linlin.storageSize() 返回此数据集的存储⼤⼩db.linlin.totalIndexSize() 返回此数据集的索引⽂件⼤⼩db.linlin.totalSize() 返回些数据集的总⼤⼩db.linlin.update(query,object[,upsert_bool]) 在此数据集中更新⼀条数据db.linlin.validate() 验证此数据集db.linlin.getShardVersion() 返回数据集共享版本号db.linlin.find({'name':'foobar'}) select * from linlin where name='foobar'db.linlin.find() select * from linlindb.linlin.find({'ID':10}).count() select count(*) from linlin where ID=10db.linlin.find().skip(10).limit(20) 从查询结果的第⼗条开始读20条数据 select * from linlin limit 10,20 ----------mysqldb.linlin.find({'ID':{$in:[25,35,45]}}) select * from linlin where ID in (25,35,45)db.linlin.find().sort({'ID':-1}) select * from linlin order by ID descdb.linlin.distinct('name',{'ID':{$lt:20}}) select distinct(name) from linlin where ID<20db.linlin.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) select name,sum(marks) from linlin group by namedb.linlin.find('this.ID<20',{name:1}) select name from linlin where ID<20db.linlin.insert({'name':'foobar','age':25}) insert into linlin ('name','age') values('foobar',25)db.linlin.insert({'name':'foobar','age':25,'email':'cclove2@'})db.linlin.remove({}) delete * from linlindb.linlin.remove({'age':20}) delete linlin where age=20db.linlin.remove({'age':{$lt:20}}) delete linlin where age<20db.linlin.remove({'age':{$lte:20}}) delete linlin where age<=20db.linlin.remove({'age':{$gt:20}}) delete linlin where age>20db.linlin.remove({'age':{$gte:20}}) delete linlin where age>=20db.linlin.remove({'age':{$ne:20}}) delete linlin where age!=20db.linlin.update({'name':'foobar'},{$set:{'age':36}}) update linlin set age=36 where name='foobar'db.linlin.update({'name':'foobar'},{$inc:{'age':3}}) update linlin set age=age+3 where name='foobar'官⽅提供的操作语句对照表:上⾏:SQL 操作语句下⾏:Mongo 操作语句CREATE TABLE USERS (a Number, b Number)db.createCollection("mycoll")INSERT INTO USERS VALUES(1,1)ers.insert({a:1,b:1})SELECT a,b FROM usersers.find({}, {a:1,b:1})SELECT * FROM usersers.find()SELECT * FROM users WHERE age=33ers.find({age:33})SELECT a,b FROM users WHERE age=33ers.find({age:33}, {a:1,b:1})SELECT * FROM users WHERE age=33 ORDER BY name ers.find({age:33}).sort({name:1})SELECT * FROM users WHERE age>33ers.find({'age':{$gt:33}})})SELECT * FROM users WHERE age<33ers.find({'age':{$lt:33}})})SELECT * FROM users WHERE name LIKE "%Joe%" ers.find({name:/Joe/})SELECT * FROM users WHERE name LIKE "Joe%"ers.find({name:/^Joe/})SELECT * FROM users WHERE age>33 AND age<=40 ers.find({'age':{$gt:33,$lte:40}})})SELECT * FROM users ORDER BY name DESCers.find().sort({name:-1})SELECT * FROM users WHERE a=1 and b='q'ers.find({a:1,b:'q'})SELECT * FROM users LIMIT 10 SKIP 20ers.find().limit(10).skip(20)SELECT * FROM users WHERE a=1 or b=2ers.find( { $or : [ { a : 1 } , { b : 2 } ] } )SELECT * FROM users LIMIT 1ers.findOne()SELECT DISTINCT last_name FROM usersers.distinct('last_name')SELECT COUNT(*y) FROM usersers.count()SELECT COUNT(*y) FROM users where AGE > 30ers.find({age: {'$gt': 30}}).count()SELECT COUNT(AGE) from usersers.find({age: {'$exists': true}}).count()CREATE INDEX myindexname ON users(name)ers.ensureIndex({name:1})CREATE INDEX myindexname ON users(name,ts DESC) ers.ensureIndex({name:1,ts:-1})EXPLAIN SELECT * FROM users WHERE z=3ers.find({z:3}).explain()UPDATE users SET a=1 WHERE b='q'ers.update({b:'q'}, {$set:{a:1}}, false, true)UPDATE users SET a=a+2 WHERE b='q'ers.update({b:'q'}, {$inc:{a:2}}, false, true)DELETE FROM users WHERE z="abc"ers.remove({z:'abc'});Mongodb启动命令mongod参数说明--quiet# 安静输出--port arg# 指定服务端⼝号,默认端⼝27017--bind_ip arg# 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP--logpath arg# 指定MongoDB⽇志⽂件,注意是指定⽂件不是⽬录--logappend# 使⽤追加的⽅式写⽇志--pidfilepath arg# PID File 的完整路径,如果没有设置,则没有PID⽂件--keyFile arg# 集群的私钥的完整路径,只对于Replica Set 架构有效--unixSocketPrefix arg# UNIX域套接字替代⽬录,(默认为 /tmp)--fork# 以守护进程的⽅式运⾏MongoDB,创建服务器进程--auth# 启⽤验证--cpu# 定期显⽰CPU的CPU利⽤率和iowait--dbpath arg# 指定数据库路径--diaglog arg# diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads--directoryperdb# 设置每个数据库将被保存在⼀个单独的⽬录--journal# 启⽤⽇志选项,MongoDB的数据操作将会写⼊到journal⽂件夹的⽂件⾥--journalOptions arg# 启⽤⽇志诊断选项--ipv6# 启⽤IPv6选项--jsonp# 允许JSONP形式通过HTTP访问(有安全影响)--maxConns arg# 最⼤同时连接数默认2000--noauth# 不启⽤验证--nohttpinterface# 关闭http接⼝,默认关闭27018端⼝访问--noprealloc# 禁⽤数据⽂件预分配(往往影响性能)--noscripting# 禁⽤脚本引擎--notablescan# 不允许表扫描--nounixsocket# 禁⽤Unix套接字监听--nssize arg (=16)# 设置信数据库.ns⽂件⼤⼩(MB)--objcheck# 在收到客户数据,检查的有效性,--profile arg# 档案参数 0=off 1=slow, 2=all--quota# 限制每个数据库的⽂件数,设置默认为8--quotaFiles arg# number of files allower per db, requires --quota--rest# 开启简单的rest API--repair# 修复所有数据库run repair on all dbs--repairpath arg# 修复库⽣成的⽂件的⽬录,默认为⽬录名称dbpath--slowms arg (=100)# value of slow for profile and console log--smallfiles# 使⽤较⼩的默认⽂件--syncdelay arg (=60)# 数据写⼊磁盘的时间秒数(0=never,不推荐)--sysinfo# 打印⼀些诊断系统信息--upgrade# 如果需要升级数据库* Replicaton 参数--fastsync# 从⼀个dbpath⾥启⽤从库复制服务,该dbpath的数据库是主库的快照,可⽤于快速启⽤同步--autoresync# 如果从库与主库同步数据差得多,⾃动重新同步,--oplogSize arg# 设置oplog的⼤⼩(MB)* 主/从参数--master# 主库模式--slave# 从库模式--source arg# 从库端⼝号--only arg# 指定单⼀的数据库复制--slavedelay arg# 设置从库同步主库的延迟时间* Replica set(副本集)选项:--replSet arg# 设置副本集名称--replSet arg# 设置副本集名称* Sharding(分⽚)选项--configsvr# 声明这是⼀个集群的config服务,默认端⼝27019,默认⽬录/data/configdb--shardsvr# 声明这是⼀个集群的分⽚,默认端⼝27018--noMoveParanoia# 关闭偏执为moveChunk数据保存# 上述参数都可以写⼊ mongod.conf 配置⽂档⾥例如:dbpath = /data/mongodblogpath = /data/mongodb/mongodb.loglogappend = trueport = 27017fork = trueauth = truee.g:./mongod -shardsvr -replSet shard1 -port 16161 -dbpath /data/mongodb/data/shard1a -oplogSize 100 -logpath/data/mongodb/logs/shard1a.log -logappend -fork -rest----------------------------------------------------------------------------------MonoDB shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是⽤JavaScript脚本完成操作的。
mongodb count语句MongoDB是一个文档型的NoSQL数据库,它的count语句用于计算文档的数量,该语句有两种形式:db.collection.count()db.collection.find().count()。
### 1. db.collection.count()db.collection.count()用于计算集合中文档的数量,该语句可以接受一个可选的参数,用于指定查询字段条件,以缩小范围。
例如: ```db.collection.count({naTom)```上述语句会统计名为Tom的文档数量。
### 2. db.collection.find().count()db.collection.find().count()使用find()语句查询文档后,在查询结果上再调用count()方法返回查询结果中文档数量。
该语句也可以指定查询字段条件进行缩小范围,但不能指定跳过的文档数量,以及获取的文档数量,它只是统计查询结果中的文档数量,例如:```db.collection.find({naTom).count()```上述语句会统计名为Tom的文档数量。
## 二、应用示例### 1.看指定字段相同的文档数量假设数据库中有一个集合student,其中保存着学生的数据,我们查看集合中学号为“0003”的学生的数量,可以使用以下语句: ```db.student.count({id:0003)```上述语句给出的结果就是,学号为“0003”的学生的数量。
### 2.看符合查询条件的文档数量假设数据库中有一个集合student,其中保存着学生的数据,我们查看集合中学号为“0003”,并且年龄大于20岁的学生的数量,可以使用以下语句:```db.student.count({id:0003 age:{$gt:20}})```上述语句给出的结果就是,学号为“0003”,并且年龄大于20岁的学生的数量。
在MongoDB中,Collection(集合)是指一组具有相似特性的文档(Documents)的容器。
在数据库中,它类似于关系型数据库中的表格(Table),但在MongoDB中,集合不要求具有相同的字段结构或数据类型,它更加灵活。
以下是对集合的一些解释和特点:
存储文档:集合用于存储MongoDB中的文档,每个文档都是一条记录,可以包含不同的字段和值。
文档以JSON(BSON)格式表示,可以包含嵌套的子文档和数组。
无模式限制:MongoDB是一个无模式的数据库,这意味着在同一个集合中的文档可以具有不同的字段结构和数据类型。
这种灵活性使得集合可以轻松地适应不同类型的数据存储需求。
基于文档模型:MongoDB的数据模型是基于文档的,它以文档为单位组织和管理数据。
集合中的文档可以根据应用程序的需要自由地定义字段和值。
快速读写:MongoDB的集合提供高效的读写性能。
它使用了索引和内存缓存等技术,可以实现快速的数据查询和更新操作。
基于分片的扩展性:MongoDB支持数据的水平扩展,可以通过分片技术将数据分布在多个服务器上。
集合可以根据需要进行分片,以提供更高的吞吐量和存储容量。
总而言之,集合是MongoDB中用于组织和存储文档的容器。
它具有灵活的数据模型,高效的读写性能和可扩展性,使得MongoDB成为处理大规模数据和复杂数据结构的理想选择。
mongo-c-driver-master的的使用方法mongocdrivermaster的使用方法Mongocdrivermaster是MongoDB官方提供的C语言驱动程序,用于连接和操作MongoDB数据库。
本文将介绍mongocdrivermaster的使用方法,包括安装、连接数据库、执行查询和更新操作等。
一、安装mongocdrivermaster要使用mongocdrivermaster,首先需要在您的计算机上安装它。
您可以从MongoDB官方网站下载源代码,然后按照官方提供的文档进行编译和安装。
具体的安装步骤如下:1. 下载源代码:打开MongoDB官方网站,找到mongocdrivermaster的源代码下载页面。
下载最新的源代码压缩包,并解压到您的计算机上。
2. 编译源代码:打开终端,并进入源代码目录。
运行以下命令进行编译:./configuremake3. 安装驱动程序:在终端中运行以下命令进行安装:sudo make install完成上述步骤后,mongocdrivermaster将成功安装在您的计算机上。
二、连接数据库安装完成后,下一步是连接MongoDB数据库。
在C语言中,我们需要使用mongoc库提供的API来实现数据库连接。
下面是一个简单的例子:#include <mongoc.h>int main() {mongoc_init();mongoc_client_t *client;mongoc_database_t *database;mongoc_collection_t *collection;client = mongoc_client_new("mongodb:localhost:27017");database = mongoc_client_get_database(client, "mydb");collection = mongoc_client_get_collection(client, "mydb", "mycollection");执行数据库操作mongoc_collection_destroy(collection);mongoc_database_destroy(database);mongoc_client_destroy(client);mongoc_cleanup();return 0;}在上述代码中,我们使用mongoc库提供的函数来创建客户端对象、数据库对象和集合对象。
MongoDB C# 驱动教程C# 驱动版本v1.6.x本教程基于C#驱动v1.6.x 。
Api 文档见此处:/csharp/current/ . 本教程介绍由10gen支持的,用于MongoDB的C#驱动。
C# 驱动由两个类库组成:BSON Library和C# Driver。
BSON Library 可以独立于C# Driver 使用。
C# Driver 则必须需要BSON Library。
你还可能对C# 驱动序列化教程感兴趣。
它是一个另外的教程因为它涵盖了很多资料。
C# 驱动既有源代码也有二进制文件。
BSON Library 和C# Driver 都存在同一个知识库里,而BSON Library可以独立使用。
原文件可以从进行下载。
我们使用msysgit 作为我们的Windows git 客户端。
可以到这里进行下载:/ .要复制知识库的话,从git bash shell里运行以下命令:$ cd <parentdirectory>$ git config --global core.autocrlf true$ git clone git:///mongodb/mongo-csharp-driver.git$ cd mongo-csharp-driver$ git config core.autocrlf true复制知识库之前,必须将core.autocrlf的全局设置设为true。
当复制完毕后,我们建议你将core.autocrlf的本地设置设为true(如上所示),这样将来core.autocrlf的全局设置更改了也不会影响到这个知识库。
如果你到时候想把全局设置的core.autocrlf改为false,则运行:$ git config --global core.autocrlf falsecore.autocrlf设置的典型问题是git 报告整个文件都被修改了(由于行结尾的差异)。
mongo-c-driver-master的的使用方法-回复mongocdrivermaster是一个用于连接和操作MongoDB数据库的C语言驱动程序。
它提供了一组函数和接口,使开发人员能够轻松地与MongoDB进行交互。
本文将逐步介绍mongocdrivermaster的安装和使用方法。
第一步:安装mongocdrivermaster要使用mongocdrivermaster,首先需要将其安装在您的开发环境中。
以下是在Linux系统上安装mongocdrivermaster的步骤:1. 打开终端并切换到您希望安装mongocdrivermaster的目录。
2. 克隆mongocdrivermaster的源代码库。
可以使用以下命令:git clone3. 进入mongo-c-driver目录,并切换到所需的版本。
在终端中执行以下命令:cd mongo-c-drivergit checkout <version>这里的`<version>`是您想要安装的mongocdrivermaster的版本号。
4. 生成构建文件。
执行以下命令:mkdir cmake-buildcd cmake-buildcmake -DCMAKE_BUILD_TYPE=Release ..5. 使用make命令构建和安装驱动程序。
执行以下命令:makesudo make install安装完成后,mongocdrivermaster将被安装在您的系统中。
第二步:连接MongoDB数据库一旦安装了mongocdrivermaster,您可以开始使用它来连接MongoDB数据库并执行操作。
以下是连接到MongoDB数据库的步骤:1. 在您的代码中引入mongocdrivermaster的头文件。
使用以下语句:#include <mongoc.h>2. 初始化mongocdrivermaster。
MongoDB知识点总结⼀:MongoDB 概述⼀、NoSQL 简介1. 概念:NoSQL(Not Only SQL的缩写),指的是⾮关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。
⽤于超⼤规模数据的存储,数据存储不需要固定的模式,⽆需多余操作就可以横向扩展。
2. 特点1. 优点:具有⾼可扩展性、分布式计算、低成本、架构灵活且是半结构化数据,没有复杂的关系等。
2. 缺点:没有标准化、有限的查询功能、最终⼀致是不直观的程序等。
3. 分类4. NoSQL 和 RDBMS 的对⽐⼆、MongoDB 简介1. 概念:MongoDB 是由C++语⾔编写的⼀个基于分布式⽂件存储的开源⽂档型数据库系统。
2. 功能:JSON ⽂档模型、动态的数据模式、⼆级索引强⼤、查询功能、⾃动分⽚、⽔平扩展、⾃动复制、⾼可⽤、⽂本搜索、企业级安全、聚合框架MapReduce、⼤⽂件存储GridFS。
1. ⾯向集合⽂档的存储:适合存储Bson(json的扩展)形式的数据;2. 格式⾃由,数据格式不固定,⽣产环境下修改结构都可以不影响程序运⾏;3. 强⼤的查询语句,⾯向对象的查询语⾔,基本覆盖sql语⾔所有能⼒;4. 完整的索引⽀持,⽀持查询计划;5. 使⽤分⽚集群提升系统扩展性;3. 适⽤场景1. ⽹站数据:Mongo⾮常适合实时的插⼊,更新与查询,并具备⽹站实时数据存储所需的复制及⾼度伸缩性。
2. 缓存:由于性能很⾼,Mongo也适合作为信息基础设施的缓存层。
在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
3. 在⾼伸缩性的场景,⽤于对象及JSON数据的存储。
4. 数据类型三、概念详解1. 数据库:MongoDB 默认的数据库为"db",该数据库存储在data⽬录中。
单个实例可以容纳多个独⽴的数据库,每⼀个都有⾃⼰的集合和权限,不同的数据库也放置在不同的⽂件中。
2. 集合:集合就是 MongoDB ⽂档组,类似于 RDBMS 的表格。
MongoDB的创建、更新和删除概要 下⾯开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容⽐较多,也⽐较繁琐, 同时使⽤频率也⽐较⾼,所以下⼀篇会拿出来单独介绍。
废话不多说,连上服务器,我们直接进⼊正题!⼀、创建 按照我们关系型数据库的思想,⼀个服务器要想存放数据,⾸先要有数据库,表,字段,约束,当然了也少不了主键,外键,索引,关系等; 但是在MongoDB的世界⾥边,我们不⽤预先的去创建这些信息从⽽直接来使⽤各个属性。
1、数据库(database) a)、创建 use mydb(创建并切换到名称为mydb的数据库实例下。
注:如果你对其不进⾏任何操作,该数据库是没有任何实际意义的) 2、集合(collection) a)、创建 我们直接指定,不做任何预处理,指定⼀个名称为users的数据集(相当于表),并向其中插⼊⼀条⽤户数据。
ers.insert({ "name" : "wjg" , "age" : 24 }) 返回结果如下,表⽰你已经成功插⼊了⼀条数据: WriteResult({ "nInserted" : 1 }) b)、显式创建 仅创建⼀个名称为collectionName的,没有任何⼤⼩和数量限制的数据集 db.createCollection("collectionName") 如果该数据集有重名,会给出已经存在的提⽰: { "ok" : 0, "errmsg" : "collection already exists", "code" : 48 } 成功之后会给出ok的提⽰: { "ok" : 1 } 3、⽂档(document) a)、单⼀插⼊ 注:如果没有主键“_id”,插⼊⽂档的时候MongoDB会为我们⾃动保存⼀个进去。
MongoDB的Distinct Count1. 引言在使用MongoDB进行数据分析和处理时,经常会遇到需要对数据进行去重和计数的需求。
MongoDB的distinct和count操作可以帮助我们实现这些任务。
本文将详细介绍使用MongoDB的distinct和count操作进行去重和计数的方法,并探讨其优劣和适用场景。
2. distinct操作2.1 概述distinct操作用于在MongoDB中查找指定字段的不同值,并返回一个去重后的结果集合。
该操作可以用于执行简单去重,或者结合其他查询条件进行复杂的去重操作。
2.2 语法distinct操作的语法如下所示:db.collection.distinct(field, query)其中,collection是要进行去重的集合,field是要去重的字段,query是查询条件。
2.3 示例假设我们有一个存储用户信息的集合users,其中每个文档包含name和age字段。
我们想要找出所有不同的年龄值。
下面的代码演示了如何使用distinct操作实现这个目标:ers.distinct("age")该操作会返回一个数组,包含所有不同的年龄值。
2.4 注意事项•distinct操作只能用于字段值的去重,不能用于去重文档本身。
如果需要去重整个文档,可以使用aggregate操作。
•distinct操作返回的结果是一个数组,如果数据量较大,可能会占用较大的内存空间。
3. count操作3.1 概述count操作用于在MongoDB中对指定条件下的文档进行计数,可以用于统计满足查询条件的文档数量。
3.2 语法count操作的语法如下所示:db.collection.count(query)其中,collection是要进行计数的集合,query是查询条件。
3.3 示例继续以上面的示例集合users为例,假设我们想要统计年龄大于等于18岁的用户数量。
MongoDB C# 驱动教程阅读目录连接字符串工厂方法安全模式属性GetDatabase方法工厂方法服务器属性Credentials属性安全模式属性GridFS propertyGetCollection方法GetCollection方法DropCollection方法RequestStart方法/ RequestDone方法数据库属性安全模式属性插入方法方法FindAll方法FindOne方法保存方法更新<tquery, tupdate="" style="padding: 0px; margin: 0px;">方法计算方法删除方法RemoveAll方法的CreateIndex方法EnsureIndex方法不同的方法FindAndModify方法Group methodMapReduce的方法集合属性修改光标之前执行的方法Skip方法限制方法排序方法其他光标修改方法触发列举的方法,计算方法尺寸的方法的GetEnumerator方法(或foreach语句)FirstOrDefault方法ToArray方法ToList方法IEnumerable的扩展方法,触发枚举安全消耗光标的说明方法数据库属性设置属性上传方法下载方式查找方法FindOne方法Exists方法删除方法ChunkSize propertyGridFS propertyId propertyLength属性MD5 propertyName属性UploadDate财产即将实施的方法创建BsonValuesBsonType财产[类型]属性[类型]属性[类型]的方法创建方法。
NET类型的隐式转换BsonValue从BsonValue。
NET类型的显式转换Equals和GetHashCode方法(和运算符==和!=)BsonDocument构造函数BsonDocument构造函数与集合初始化器的语法BsonDocument构造函数用流利的接口方法AllowDuplicateNames财产Count属性元素属性名称属性RawValues财产Values属性添加方法添加(BsonElement)方法添加方法(IEnumerable的)添加(名称,值)的方法添加方法(条件,名称,值)添加方法(IEnumerable的)(IDictionary的<string,的对象)的方法< a="" style="padding: 0px; margin: 0px;">清除方法Contains方法ContainsV alue方法GetElement方法GetValue方法和索引Merge方法删除方法RemoveAt方法设置方法(指数值)SET(名称,值)的方法ToBson方法toJSON方法ToString方法TryGetElement和TryGetValue方法BsonArray构造函数索引器属性Count属性添加方法AddRange方法清除方法的indexOf方法插入方法删除方法RemoveAt方法1.概述本教程是10gen支持C#驱动程序MongoDB的介绍。
假定您熟悉使用MongoDB,因此主要集中在如何使用C#访问MongoDB的。
它分为两个部分:C#驱动程序,BSON 图书馆。
C#驱动程序是建立在顶部,其目的是单独使用的C#驱动程序的的BSON图书馆,。
在第1部分中,我们将介绍C#驱动程序的主类:MongoServer,MongoDatabase,MongoCollection,MongoCursor,MongoGridFS,MongoGridFSFileInfo和SafeMode。
在第2部分,我们将讨论的主要类的BSON Library的:BsonType,BsonValue(及其子类),BsonElement,BsonDocument和BsonArray。
第1部分:C#驱动程序本教程的第1部分组织自顶向下的方式,所以你有时可能提前偷看,如果事情是没有意义。
您甚至可能想要读第2,如果你是完全陌生的的BSON概念,如文档和元素与前第1部分。
参考文献和命名空间为了从你的程序中使用C#的驱动程序,您必须添加以下两个DLL文件:∙MongoDB.BsonLibrary.dll∙MongoDB.CSharpDriver.dll您还应该添加以下语句到你的源文件:using MongoDB.BsonLibrary;using MongoDB.CSharpDriver;除了极少数例外,你将要使用的类的名称前缀与任何“BSON”的,如果他们的BsonLibrary 或“Mongo”的一部分,如果他们的C#驱动程序的一部分。
这样做是为了获得名称冲突的可能性降至最低,当您添加到你的程序的两个使用语句。
预计将方法的参数(主要是枚举和标志)的一些类,具有较短的名称,不使用任何前缀。
我们喜欢使用C#的var语句声明的变量,因为它会导致更短,我们的感觉,更可读的代码。
Visual Studio可以很容易地看到一个变量的类型,如果您需要通过将鼠标指针悬停在变量或使用IntelliSense。
然而,当阅读本文档,你没有这个能力,所以在这个文件中,而不是写:var server = MongoServer.Create(connectionString);var test = server[“test”];var books = test[“books”];按照我们的建议,我们会来写:MongoServer server = MongoServer.Create(connectionString);MongoDatabase test = server[“test”];MongoCollection<BsonDocument> books = test[“books”];所以,你可以看到什么类型正在使用。
线程安全只有少数的C#驱动程序类是线程安全的。
其中:MongoServer的,MongoDatabase,MongoCollection MongoGridFS。
通用类,你会使用很多是不是线程安全包括MongoCursor的所有类的BsonLibrary(除BsonSymbolTable)的。
A类不是线程安全的,除非特别记载是线程安全的。
所有的所有类的静态属性和方法是线程安全的。
MongoServer类这个类服务s的工作与MongoDB的根对象。
这个类的一个实例的客户端是一个MongoDB服务器,你想沟通。
虽然这个类有公共的构造函数,推荐的方式来获得这个类的一个实例是使用工厂方法。
每个实例MongoServer保持与服务器的连接池。
这些连接之间共享所有的呼叫到服务器。
你可能要调用构造函数,而不是直接调用创建工厂方法MongoServer的几个原因之一是,如果你要保持一个单独的连接池的一些操作。
这个类的实例是线程安全的。
连接字符串最简单的方法是使用一个连接字符串连接到MongoDB的。
标准MongoDB的连接字符串的格式是一个以下列格式的URL:mongodb://[username:password@]hostname[:port][/database]如果您使用的是MongoDB服务器的身份验证的用户名和密码,只应。
这些凭据将适用于一个单一的数据库,如果数据库名称是存在的,否则他们将所有的数据库的默认凭据。
要进行身份验证对管理数据库追加“(管理)”的用户名的。
端口号是可选的,默认为27017。
如果数据库名是存在的,那么这个连接字符串,也可以与创建方法MongoDatabase的使用。
创建方法MongoServer忽略的数据库名称(如果存在)(以外的凭据,以确定是否适用于一个单一的数据库或所有数据库的默认凭据)。
要连接到一个副本设置指定的种子提供多个以逗号分隔的主机名列表。
例如:mongodb://server1,server2:27017,server2:27018该连接字符串指定的种子名单,由三个服务器(其中两个是在同一台机器上,但在不同的端口号)。
C#驱动程序能够连接到副本集,即使种子名单是不完整的。
它会发现在主服务器即使主只要不是种子列表中的种子列表上的至少一个次级服务器响应(响应将包含完整副本集和当前的主的名称)。
工厂方法最好的方式得到的一个实例MongoServer是,使用CREATE工厂方法。
使用相同的连接字符串时,此方法将返回相同的实例MongoServer,所以你不必担心一大堆的情况下,如果你调用Create不止一次。
此外,如果你只使用一个数据库时,你可能会发现它更容易跳过调用此方法,并呼吁建立工厂方法MongoDatabase。
要连接到MongoDB的本地,你会写这样的代码:string connectionString = “mongodb://localhost”;MongoServer server = MongoServer.Create(connectionString);或许......MongoServer server = MongoServer.Create();因为连接到本地主机是默认的。
中的Create方法MongoServer忽略了数据库名称,如果存在的话。
但是,如果省略数据库名称,但存在凭据,然后MongoServer 将承担这些凭据要使用的所有数据库,将它们存储在MongoServer的Credentials属性,并利用它们时GetDatabase被称为无凭据的默认凭据。
这使得它真正易于使用相同的凭证与所有的数据库。
Create方法使用的种子列表中的服务器的身份时,如果已经有一个现有的实例MongoServer返回(而不是实际的副本集的成员,直到建立连接后,不知道是受改变)。
安全模式属性此属性表示此服务器的默认安全模式。
返回此服务器实例的MongoDatabase任何情况下,它会被继承,但可以改变indepently服务器的数据库的默认安全模式。
安全模式类有进一步的描述。
GetDatabase方法,从一个实例MongoServer你可以代表该服务器上的数据库使用GetDatabase方法的对象的实例。
要得到一个数据库对象,你可以这样写:MongoDatabase test = server.GetDatabase(“”);MongoDatabase test = server[“test”];这两种形式是完全等效的。
如果您使用的认证,就必须写略有不同的代码,如:MongoCredentials credentials =new MongoCredentials(“username”, “password”);MongoDatabase test = server.GetDatabase(“test”, credentials);或MongoDatabase test = server[“test”, credentials];MongoServer维护一个表的MongoDatabase实例的数据库/凭据组合,并每次你问相同的数据库/凭据组合,你得到相同的实例MongoDatabase,所以你无需担心不必要的重复的实例存在。