java mongodb insert之 insert 和 save 函数的区别

[转]十个 MongoDB 使用要点
从 [url = &http://space.itpub.net/133735/viewspace-710117&]mongodb 阶段性技术总结[/url] 中抽取并整理了对大家有帮助的十个要点:
1.mongodb 表名和字段名统一用小写字母
mongodb 是默认区分大小写的,为了避免以前在 mysql 下遇到的大小写敏感导致程序访问频频出错,
建立规范,mongodb 的表名和字段名都用小写字母命名。
2.尽可能的缩短字段名的长度
mongodb 的 schema free 导致了每笔数据都要存储它的 key 以及属性,这导致了这些数据的大量冗余。
开发人员也许考虑到,从易读性出发设计的 key 名,基本都是按照字面意思去设计的,这导致 key 很长,对应的数据存储占用了很大的空间。
所以,在你的程序里维护一套字典即可,尽可能降低 key 的长度。
static final String CONTENT = &content&;
static final String CONTENT_TYPE = &ctype&;
static final String CONTENT_LENGTH = &clen&;
3.记住,mongodb 的查询每次只能用到一个索引
对于较复杂的表结构,可能会导致你频频使用联合索引。
1)mongodb 单表最大索引数为 64 。
2)索引越多,插入或修改记录就会导致 mongodb 越慢。写锁会阻塞读请求,写得越慢,阻塞读请求越多、阻塞时间越长。
所以,索引越加越多的时候,你可能需要审视一下表结构设计的合理性。
4.客户端连接数大小的设置
mongodb-java-driver 的连接池,目前从观察到的情况是应用一开启便根据 connectionsPerHost 变量的设置,建立全部连接,然后提供给程序使用,并且一旦其中某个连接到数据库的访问失败,则会清空整个连接池到这台数据库的连接,并重新建立连接。
而 mongodb 对中断连接的垃圾清理工作则是懒惰的被动清理方式,如果驱动程序端配置的连接数过大,一旦发生重连,则会导致 mongo 服务器端堆积大量的垃圾连接以及对应数据,导致主机资源耗尽。
建议: mongodb 驱动的连接池大小的设置一般应该控制 100 左右。
( 参考阅读:PHP-FPM模式下可怕的 MongoDB-PHP-Driver 连接池无节制连接问题)
5.实例分离
mongodb 对数据库的访问全部加锁。
如是查询请求则设置共享锁。
数据修改请求则设置全局排他锁,且是实例级别的排他锁。
写锁会阻塞读请求,如果长时间持有写锁,会阻塞整个实例的读请求。
1)不同应用不应该共用同一个实例,防止互相阻塞!
2)如服务器资源不足,共用同一个实例,要保证读写特性相同,如都是读多写少,防止一台写多应用阻塞读请求。
(评语:旧版本的MongoDB (pre 2.0)拥有一个全局的写入锁,这个问题在2.0版本中的得到了显著的改善,并且在当前2.2版本中得到了进一步的加强。MongoDB 2.2使用数据库级别的锁在这个问题上迈进了一大步。所以用 MongoDB 2.2的人可以忽略此条目。)
6.需要重点关注的 mongodb 性能指标
关注主要性能指标:
1)Faults:显示 mongodb 每秒页面故障的数量,这个是 mongodb 映射到虚拟地址空间,而不是物理内存。这个值如果飙高的话,可能意味着机器没有足够的内存来存储数据和索引。
2)Flushes:每秒做了多少次 fsync,显示多少次数据被刷新进了磁盘。
3)locked:写锁。
4)idx miss:索引未命中比例。
5)qr | qw:读写锁的请求队列长度。
6)conn: 当前已经建立的连接数。
7.严重的空间碎片问题
mongodb 如果数据修改很频繁,会出现比较严重的空间碎片问题,表现在磁盘文件扩张与实际数据量不相符,内存不够用,索引命中率低,查询效率降低。
碎片整理,目前我们采用的版本没有太有效的方法。
可以用 db.repaireDatabase() 来整理数据库,这个过程非常的慢。
如果是 master/slave 模式,则相当于执行一次主从切换,然后从新建立从库。
如果是 replSet 架构,可以停掉数据库,然后删除数据目录,从新从复制组中全同步数据,这个时候要考虑 oplog 的尺寸。
一个大体的步骤:
1)先调用rs.freeze(1200),将每个不想让它成为 primary 的机器让它在 1200 秒内无法成为 primary(这步也可以不做);
2)将 primary stepDown,不出意外新的 primary 会起来;
3)将原 primary kill 掉;
4)删掉所有 data 数据(调用 repair 很慢,真不如干掉重新来);
5)再重启动原 primary 的进程;
6)以此循环完成整个复制组的全部重建。
8.连接池 WriterConcern 模式选择
有些应用配置了 WriterConcern.FSYNC_SAFE 模式;这种配置意味着客户端在插入数据或更新数据的时候,要求 mongodb 必须将所更新的数据写入磁盘并返回更新成功的信息给程序。
如果碰上应用程序访问压力大,mongodb 就会反应迟钝,并可能会假死。
针对此情况,需要评估数据的一致性需求,做出合适调整。
我们一般建议关闭此选项。
(评语:刘奎波的业务中心优化时就关闭了这个 WriterConcern.FSYNC_SAFE 模式)
9.开发时注意的细节
1)更新某条数据的时候,先查出来再更新会减小锁的时间;
2)只有真正需要的字段才select出来;
3)只有返回很少结果的查询才用索引,否则会加载太多数据,比没有用索引还慢!
4)属性比较多的时候,建立分层的关系能够提高查询效率,否则每个记录都要过一遍才能找到要的属性。(评语:貌似说的是以 Array 形式存储的 subdocument)
5)skip+limit 翻页,越往后面越慢。比较靠谱的做法是,先找出上次的id,翻页的时候不用 skip:
last_row_id = ObjectId('....');
db.activity_stream-&find({_id:{$lt: last_row_id },user_id:20 } ).sort( {_id:-1} ).limit(10);
10.关于硬件资源的选择
虚拟机可以很好的隔离资源,并可动态的扩展。
我们建议 mongodb 的部署采用虚拟机的方式,每个虚拟机部署一个实例,使各节点分散在不同的物理机上,根据应用的前期预测,平衡虚拟机的之间的i/o。
参考资源:
1)horizonhyg,2012,Mongodb写入安全机制--GetLastError;
2)horizonhyg,2012,java连接mongo;
3)55最佳实践系列:MongoDB最佳实践
转:/zhengyun_ustc/archive//2875962.html
十个 MongoDB 使用要点
1.mongodb 表名和字段名统一用小写字母 mongodb 是默认区分大小写的,为了避免以前在 mysql 下遇到的大小写敏感导致程序访问频频出错, 建立规范,mongodb 的表名和字段名都用小写字母命名。
2.尽可能的缩短字段名的长度 mongodb 的 schema free 导致了每笔数据都要存储它的 key 以及属性,这导致了这些数据的大量冗余。
MongoDB提供了一系列组件来提升数据的安全性。数据安全在MongoDB中是最重要的――因此它利用这些组件来减少曝光面。下面是10个可以用来改善你个人或云中MongoDB服务器安全的小提示。 1. 启用auth-即使在可信赖网络中部署MongoDB服务器时启用auth也是项好的安全实践。当你的网络受攻击时它能够提供“深层防御”。编辑配置文件来启用auth。
MongoDB使用
1. db.users.find().limit(100); 2. it 可以将其余的显示出来. 3. 查看索引 db.users.getIndexes(); 4. 性能耗时查询 db.setProfilingLevel(2);
db.setProfilingLevel( level , slowms ); &nbs
Mongodb使用save更新
mongodb 的 insert()、save() ,区别主要是:若存在主键,insert() 不做操作,而save() 则更改原来的内容为新内容。 在使用save时,由于mongodb默认是_id为主键,所以需要在实例类中添加一个_id字段,否则则会有重复数据出现。
mongodb使用总结1
安装mongodb $ # replace &1.6.4& in the url below with the version you want $ curl http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.6.4.tgz & mongo.tgz $
Mongodb使用QueryBuilder查询
QueryBuilder queryBuilder = new QueryBuilder(); queryBuilder.and(key).is(value); 也可直接用QueryBuilder.start(key).is(value).get()获取一个DBObject对象进行查询 上面key是想要查询的键,value为匹配的值 然后使用 co
mongodb使用 java
mongodb使用 1. 下载 mongo-2.6.3.jar2. 新建 java项目3. 按Spring方式封装查询 直接上代码
package com. import java.net.UnknownHostE import com.mongodb.DB; import com.mongodb.DBC i
使用MongoDB开发实践体会 年前在项目中使用了NoSQL的代表之一 —— MongoDB,微博上总结了一些心得,在这里和各位分享一下。
开发中用MongoDB的爽快之处
MongoDB是一个非常适合PHP开发的#NoSQL# 数据库,尤其支持高并发和schema-free(自由结构)特性,使得PHP开发变得更灵活,更高效。大家都来试试吧!
MongoDB使用学习记录
MongoDB权威指南:/view/4b806a18c5da50e.html?pn=NaN
JAVA访问MongoDB: /blog/1466174 &nbs
MongoDB的MapReduce使用
http://www.mongodb.org/display/DOCS/MapReduce http://www.rainsts.net/article.asp?id=1044 /mongodb/mongo-java-driver/commit/fa003adc5db8a6c4efe
mongodb中使用MapReduce
MapReduce函数的用法如下: db.users.mapReduce(map, reduce [, {option}]
) 后边的 option参数可选,但 out参数必须要有,否则会报没有指定输出的错误,out的值有以下几种: {replace : &collecti
MongoDB中arbiter的使用
通过对官方文档的研究得知,如果在rs模式中,先要2份数据备份的话,就必须使用arbiter,因为如果仅有2个副本,那么通过MongoDB自身的选举策略是无法决定哪个是primary,哪个是secondary的,所以需要额外的添加一个arbiter来参与投票选举,当前的MongoDB中最多支持副本集为12个,那么就需要额外的一个arbiter作为投票机器。另外
让数据库变快的10个建议【转】
大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。
0. 小心设计数据库
第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。
譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库列中的例子。对
学习使用spring data连接mongodb replset
1、分别在两个命令窗口中以replset方式启动两个mongodb进程
D:\mongodb\bin&mongod.exe --dbpath=d:\mongodata\data0 --port=10001 --replSet rcw /127.0.0.1:20001 D:\mongodb\bin&mongod.ex
mongodb系列之-mongodb gridfs分析(java应用)
Mongodb GridFS文件系统
Mongodb gridfs文件系统通过files与chunks 2个集合来保存文件,其中files集合保存每个文件的元数据(包括每个文件被分割成了多少) , chunks集合具体保存每个文件相应的数据chunk,大于256kb的文件被分割为多个
MongoDB Java Driver 源码分析(10):com.mongodb 总结
  com.mongodb 是 MongoDB Driver 核心类所在的包。其中 Mongo 类是整个 Driver 的入口点。
  下面列出之前对这个包中的几个主要类的介绍:
  Mongo 表示一个数据库实例,可能包含多个 Server 。   http://xxing22657-yahoo-com
使用java操作MongoDB Demo
public class Demo { public static void main(String[] args) { Mongo conn = DB db = try { conn = new Mongo(&localhost&, 27017); db = conn.getDB( &test&qu
  验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机和人的公共全自动程序,可以防止恶意破解密码、刷票、论坛灌水等等。今天,本文与大家分享十个创意的验证码实现。 1. QapTcha
2. buttonC
CodeProject上最近()的几十个好.NET代码,说明如下: a.如果没有额外说明,都是C#编写的; b.后面给出的评分为个人观点,请以实际为标准。
1、MSN aeronix Alerter:动态生成MSN提醒服务(RSS),WinForm。 2、Cool Calendar - Amazing Calendar without popup:非弹出式日历,WebForm
海量数据处理:十道面试题与十个海量数据处理方法总结
第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。
首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法, 比如模1000,把整个大文件映射为1000
  我一直觉得掌握字体的使用和排版技巧是很难的。之前和大家分享了很多的字体资源,有英文手写字体、复古字体、广告字体、LOGO字体等等很多的字体资源,在这么多的字体中,如何把合适的字体用在合适的地方是很有学问的。下面收集了十个字体使用技巧和排版方面的网站,能够帮助你更好的掌握字体的应用。 Typesites
Typesites 是一个非常优秀的字体灵感来源,每周推出非常有趣的字体设计
本文提供即刻提升你的脚本性能的十个步骤。不用担心,这并不是什么高深的技巧。人人皆可运用!这些技巧包括:
使用最新版本
合并、最小化脚本
用for替代each
用ID替代class选择器
给选择器指定前后文
避免DOM操作
避免使用concat(),利用join()处理长字串
返回false值
利用小抄和参考文档
使用最新版本 jQuery一直处于不断的开发和改进过程
数据库开发10个最重要特点
本文从数据库开发的方面讲述了SQL Server2005的10个最重要的特点。   NET框架主机   使用SQL Server2005,开发人员通过使用相似的语言,例如微软的VisualC#.net和微软的VisualBasic,将能够创立数据库对象。开发人员还将能够建立两个新的对象--用户定义的类和集合。
  XML技术
  在使用本地网络和互联网的情况下,在
1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本。因为新版本会改进性能,还有很多新功能。 下面就来看看,不同版本的jQuery性能差异有多大。这里是三条最常见的jQuery选择语句: $(‘.elem') $(‘.elem', context) context.find(‘.elem') 我们用1.4.2、1.4.4、1.6.2三个版本的jQuery测试,看看
1.Ajax Rain
AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例,有一些Demo的确值得你去看一看,即使你不是网页设计(开发)师。 2.Ajax Daddy
Ajax Daddy收集了大量漂亮的Web2.0工具,其中一个使用的功能就是,在你把某个Ajax/Javascript实例应用在自己的网
数据库设计:表的设计命名的十个注意点
1.表名一般以【模块名称_具体表名】来实现,同一个模块的前缀是一样的。(Oracle大小写敏感,在SQL中可以不用&_&,因为可以用大小写一起的写法。这也是可以的)
2.表名称不应该取得太长(一般不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符)。表名使用英文的原因,有些项目有英文版的需要,或者这个项目是给外国做的时
JDBC连接Oracle数据库的十个技巧
1、在客户端软件开发中使用Thin驱动程序 在开发Java软件方面,Oracle数据库提供了四种类型的驱动程序,其中两种用于应用软件、applets、servlets等客户端软件,另 外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用 Java本地化接口(JNI)
限制MongoDB使用内存大小
限制MongoDB使用内存大小
因为MongoDB的内存是系统的虚拟内存管理的,MongoDB并不干涉内存管理工作,这样虽然可以简化Mongo的工作,但同时Mongo的内存使用是没法控制的。 真的没法控制?办法是有的,可以通过ulimit 来控制用户进程的虚拟地址空间的大小。 ulimit 是控制着所有进程的内存大小,怎么针对MongoDB进行控制呢? 其实可
MongoDB的Java驱动使用整理
该文档是翻译自文档[mongodb-docs-.pdf]的[Java Language Center]章节,根据自己的理解整理而成。 希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。&nb
使用MongoDB需要注意的地方
最近项目里使用了MongoDB,遇到一些问题,可能不知道的很容易找了半天也没有头绪,总结一下: 1、update方法只更新一条记录默认情况下update只更新符合查询条件的第一条找到的记录。而不像SQL里更新所有符合条件的记录。所以请按照需要手动添加 multi 这个参数。
2、update方法的更新参数像下面这个语句myColl.update(
  现在市面上有许多种图像处理软件,其中Photoshop就绝对是属于兰博基尼级别的图像处理软件。无疑,Photoshop功能是非常强大的,它可以帮助你创作许多充满创意的作品。但同样,由于功能强大,Photoshop也是一款非常复杂的图像处理软件。尤其对于PS小白来说,他们往往会弄不清楚各种工具的功能与使用方法。这里,我们就和大家介绍十个非常棒的Photoshop隐藏技巧,出现的频率或许不太高,但
Rails3.2使用mongoDB学习笔记之mongoid
前段时间写过一个mongo_mapper的demo程序,在写那个测试程序的时候,看见很多人都说mongoid更好,于是打算用一下试试,写了好久了,最近公司比较忙,没时间整理,现在贴出来。
rails new spec_mongoid
一、mongonid
官方首页http://mongoid.o
几十年来,在台式电脑操作系统领域,苹果和微软一直酣战不休,它们都力图超越对方。到现在,在这场激烈的战斗中,移动操作系统和云服务也变成了它们各自的竞争利器。在与微软的较量中,苹果开辟了几个新的战线。如果事情按照苹果设想的那样发展,那么它可能会极大地挫伤微软的操作系统。在数十年的激烈交锋中,绝大多数时候都是微软占据上风,但是现在,苹果正在逐步显示自己的优势,并蚕食Windows的市场份额。   1.仅
  大部分的用户被问起拍照的用途,会说平时随便拍拍,旅游的时候用和拍点人像。被问得最多的就是这样的需求应该买怎样的相机,但很少人会关心旅游拍照要留意些什么,仿佛有了相机就完事大吉一般,最后在旅游过程中出现了拍照难题。这里写出十点最容易在旅游摄影中犯的错误,给大家参考一下。
  一、出发前不做功课   旅游总是要有计划的,如果说是跟团旅游的话,那么可以少操点心,自由行的话,不做功课的话,会在旅游过
1.Linux是大小写敏感的系统,举个例子,Mozilla, MOZILLA, mOzilla和 mozilla是四个不同的命令(但是只有第四个mozilla是真正有效的命令)。还有,my_filE, my_file,和 my_FILE是三个不同的文件。用户的登录名和秘密也是大小写敏感的(这是因为UNIX系统和C语言的传统一向是大小写敏感所致)。
2.文件名最多可以有256个字符,可以包含数字,
  如今,网上有各种各样的 JavaScript 框架用来简化 Web 应用开发。这些框架都提供了一些核心的特性,例如 DOM 操作,动画,事件处理以及 Ajax 交互,但不是都带有 UI 组件。今天这篇文章向大家推荐的10个 JavaScript 框架提供了丰富的 Web UI 组件,帮助你构建一致,可靠以及高度交互的漂亮用户界面。   ExtJS 是最流行的 JavaScript 框架之一,提
下面给大家说说10个Windows 7绝对不能关闭的服务。      1.杀毒软件服务      2.DNS Client     官方解释:DNS 客户端服务(dnscache)缓存域名系统(DNS)名称并注册该计算机的完整计算机名称。如果该服务被停止,将继续解 析 DNS 名称。然而,将不缓存 DNS 名称的查询结果,且不注册计算机名称。如果你停止了此服务,你的电脑将不能解释DNS信息,不能用
全球超过300万个互联网网站的管理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。
  如果你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的认
  一:参加摄影比赛   虽然摄影比赛主题类型众多,规模大小也有所不同,但都是能逼人尽力用心去创作,因为你的参赛作品将会被供众人批评检视,唯一能做的,就是在交件前,确保作品是完美无暇和令人自豪。如果你的摄影生涯陷入谷底,那么参加摄影比赛也许是一个不错的方法,用来恢复摄影人的自信。
  二:尝试使用新镜头   每个摄影玩家必定都有惯用的镜头,使用起来相当得心应手,如果有机会的话,可以借用从来没
BAE上连接mongodb每隔十多小时就不能连接的问题
之前解决了BAE mongodb不支持长连接,每隔30秒断开的问题,但是在可以重连的情况下每隔十多小时还是会出现无法连接的问题,没有异常现象,只是莫名其妙的连不上。所以暂时就采用一个很低端的办法解决这个问题,那就是重启应用。本想做个监听,当mongodb连不上的时候重启应用,不过还没想到怎么做这个监听&&&& & 在开发之前,选择MongoDb驱动是件很重要的事情。如果选择不好,在后期的开发的是件很费力的事情,因为我就遇到这样的问题。MongoDb驱动有几种比较流行驱动,官方驱动和samus是两种使用比较多的。&&&&&&
&&&&&& 好了,接着说今天的内容了。&&&&&& 首先从MongoDb的官方网站上下载CSharp驱动()。我使用的是CSharpDriver-1.1.0.4184,里面还包含一个CSharpDriverDocs.chm的文档。&&&&&&& MongoDb插入原理:使用驱动程序进行插入的时候,会将数据转换成BSON格式。数据库会解析BSON,并检验是否含有“_id”键,因为“_id”键在插入到数据库时MongoDb会自动生成。而且每次插入文档不能超过4M。这个应该是和MongoDb本身有关。但是MongoDb1.8版本的支持16M,为什么是这个样子我到没怎么研究。这个想留给有心人帮忙解决下了。
&&&&& 插入的Shell操作有Insert和Save两种语法,先看下面的Shell
& var time = new Date(" 21:50:00") //定义一个时间对象& var i = {"time":time,"userid":10001,"sessionid":"00","ip":"192.168.0.1","title":"Login","url":"Login.aspx"}& //定义一个文档对象& i&& //查看 i 文档{&&&&&&& "time" : ISODate("T13:50:00Z"),&&&&&&& "userid" : 10001,&&&&&&& "sessionid" : "00",&&&&&&& "ip" : "192.168.0.1",&&&&&&& "title" : "Login",&&&&&&& "url" : "Login.aspx"}& use testDb& show collections& //查看当前集合,把i文档插入到login集合中mycmyc1myc2system.indexes& db.login.insert(i)& db.login.findOne(){&&&&&&& "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), //MongoDb会为每个插入的对象自动生成一个"_id"的值,你可以在插入的时候自己指定这个值,如下面&&&&&&& "time" : ISODate("T13:50:00Z"),&&&&&&& "userid" : 10001,&&&&&&& "sessionid" : "00",&&&&&&& "ip" : "192.168.0.1",&&&&&&& "title" : "Login",&&&&&&& "url" : "Login.aspx"}& i = {"_id":"newid_100001","time":time,"userid":10001,"sessionid":"00","ip":"192.168.0.1","title":"Login","url":"Login.aspx"}{&&&&&&& "_id" : "newid_100001",&&&&&&& "time" : ISODate("T13:50:00Z"),&&&&&&& "userid" : 10001,&&&&&&& "sessionid" : "00",&&&&&&& "ip" : "192.168.0.1",&&&&&&& "title" : "Login",&&&&&&& "url" : "Login.aspx"}& db.login.save(i) //这里用save插入文档到数据库& db.login.find()& //查询结果两条文档,第二条文档"_id"是自定义的值{ "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), "time" : ISODate("T13:50:00Z"), "userid" : 10001, "sessionid" : "00","ip" : "192.168.0.1", "title" : "Login", "url" : "Login.aspx" }{ "_id" : "newid_100001", "time" : ISODate("T13:50:00Z"), "userid" : 10001, "sessionid" : "00", "ip" : "192.168.0.1","title" : "Login", "url" : "Login.aspx" }
注意:1:Insert和Save的区别是:如果插入的集合的“_id”值,在集合中已经存在,用Insert执行插入操作回报异常,已经存在"_id"的键。用Save如果系统中没有相同的"_id"就执行插入操作,有的话就执行覆盖掉原来的值。相当于修改操作。我这里就不做演示了。
下面说下用C#驱动 添加文档。
2:在新建一个集合或者一个数据库时,MongoDb不会在马上生成。而是在你添加了第一个数据后才会有显示。这个特性很多的数据库都用,比如说SQLite。
下面说下用 C#驱动 添加文档
C#驱动 添加文档
&&1&#region&Version&Info&&2&/*&========================================================================&&&3&&&&&*&【说明描述】&&&4&&&&&*&&&&5&&&&&*&作者:yoolo&&&&&&&&时间:&21:15:38&&&6&&&&&*&文件名:NoSpiderAuto.LoginDemo&&7&&&&&*&版本:V1.0.1&&&8&&&&&*&&&9&&&&&*&修改者:&&&&&&&&&&&时间:&&&&&&&&&&&&&&&&10&&&&&*&修改说明:&&11&&&&&*&========================================================================&&12&&&*/&13&#endregion&14&&15&namespace&NoSpiderAuto&16&{&17&&&&&using&S&18&&&&&using&System.Collections.G&19&&&&&using&System.L&20&&&&&using&System.T&21&&&&&using&MongoDB.D&22&&&&&using&MongoDB.B&23&&24&&&&&internal&class&LoginDemo&25&&&&&{&26&&&&&&&&&MongoDatabase&&27&&&&&&&&&MongoCollection&&28&&&&&&&&&public&LoginDemo()&29&&&&&&&&&{&30&&&&&&&&&&&&&MongoServerSettings&set&=&new&MongoServerSettings()&31&&&&&&&&&&&&&{&32&&&&&&&&&&&&&&&&&Server&=&new&MongoServerAddress("<span style="color: #7.0.0.1")&33&&&&&&&&&&&&&};&34&&&&&&&&&&&&&MongoServer&server&=&new&MongoServer(set);&35&&&&&&&&&&&&&db&=&server.GetDatabase("testDb");&36&&&&&&&&&&&&&coll&=&db.GetCollection("login");&37&&&&&&&&&}&38&&39&&&&&&&&&///&&summary&&40&&&&&&&&&///&单个对象插入&41&&&&&&&&&///&&/summary&&42&&&&&&&&&public&void&InsertLogin()&43&&&&&&&&&{&44&&&&&&&&&&&&&var&Time&=&DateTime.Now.ToUniversalTime();&45&&46&&&&&&&&&&&&&//实例一&添加匿名对象&47&&&&&&&&&&&&&var&login&=&new&{&_id&=&"newid_100002",&time&=&Time,&userid&=&<span style="color: #002,&sessionid&=&"<span style="color: #",&ip&=&"<span style="color: #2.168.0.2",&title&=&"注册",&url&=&"Register.aspx"&};&48&&&&&&&&&&&&&coll.Insert(login);//插入成功&49&&50&&&&&&&&&&&&&//添加一个BsonDocument对象&51&&&&&&&&&&&&&BsonDocument&doc&=&new&BsonDocument();&52&&&&&&&&&&&&&doc.Add("_id",&BsonValue.Create("newid_100003"));&53&&&&&&&&&&&&&doc.Add("time",&BsonValue.Create(Time));&54&&&&&&&&&&&&&doc.Add("userid",&BsonValue.Create(<span style="color: #003));&55&&&&&&&&&&&&&doc.Add("sessionid",&BsonValue.Create("<span style="color: #"));&56&&&&&&&&&&&&&doc.Add("ip",&BsonValue.Create("<span style="color: #2.168.0.3"));&57&&&&&&&&&&&&&doc.Add("title",&BsonValue.Create("注册"));&58&&&&&&&&&&&&&doc.Add("url",&BsonValue.Create("Register.aspx"));&59&&&&&&&&&&&&&coll.Insert(doc);//插入成功&60&&61&&&&&&&&&&&&&//添加一个对象&62&&&&&&&&&&&&&Login&man&=&new&Login();&63&&&&&&&&&&&&&man._id&=&"newid_100004";&64&&&&&&&&&&&&&man.time&=&T&65&&&&&&&&&&&&&man.userid&=&<span style="color: #004;&66&&&&&&&&&&&&&man.sessionid&=&"<span style="color: #";&67&&&&&&&&&&&&&man.ip&=&"<span style="color: #2.168.0.4";&68&&&&&&&&&&&&&man.title&=&"注册";&69&&&&&&&&&&&&&man.url&=&"Register.aspx";&70&&&&&&&&&&&&&coll.Insert(man);//插入成功&71&&72&&&&&&&&&}&73&&&&&&&&&///&&summary&&74&&&&&&&&&///&批量插入&75&&&&&&&&&///&&/summary&&76&&&&&&&&&public&void&InsertBatchLogin()&77&&&&&&&&&{&78&&&&&&&&&&&&&var&Time&=&DateTime.Now.ToUniversalTime();&79&&&&&&&&&&&&&List&Login&&logins&=&new&List&Login&();&80&&81&&&&&&&&&&&&&for&(int&i&=&<span style="color: #;&i&&&<span style="color: #0;&i++)&82&&&&&&&&&&&&&{&83&&&&&&&&&&&&&&&&&Login&man&=&new&Login();&84&&&&&&&&&&&&&&&&&man._id&=&"newid_100001"&+&i.ToString();//_id在批量插入的时候不能重复,如果有一个重复全部集合无法插入到集合&85&&&&&&&&&&&&&&&&&man.time&=&T&86&&&&&&&&&&&&&&&&&man.userid&=&<span style="color: #004&+&i;&87&&&&&&&&&&&&&&&&&man.sessionid&=&"<span style="color: #";&88&&&&&&&&&&&&&&&&&man.ip&=&"<span style="color: #2.168.0.4";&89&&&&&&&&&&&&&&&&&man.title&=&"注册";&90&&&&&&&&&&&&&&&&&man.url&=&"Register.aspx";&91&&&&&&&&&&&&&&&&&logins.Add(man);&92&&&&&&&&&&&&&}&93&&&&&&&&&&&&&coll.InsertBatch(typeof(Login),&logins);&//插入成功&94&&&&&&&&&}&95&&&&&}&96&&97&&&&&public&class&Login&98&&&&&{&99&&&&&&&&&public&string&_id&{&get;&set;&}<span style="color: #0&&&&&&&&&public&DateTime&time&{&get;&set;&}<span style="color: #1&&&&&&&&&public&int&userid&{&get;&set;&}<span style="color: #2&&&&&&&&&public&string&sessionid&{&get;&set;&}<span style="color: #3&&&&&&&&&public&string&ip&{&get;&set;&}<span style="color: #4&&&&&&&&&public&string&title&{&get;&set;&}<span style="color: #5&&&&&&&&&public&string&url&{&get;&set;&}<span style="color: #6&&&&&}<span style="color: #7&}
&&&&&& 如果要插入多个文档,使用批量插入会快一些。一次批量插入只是单个Tcp请求,也就是避免了多个请求带来的开销!
&&&&&& 如果要看更多,请访问我之前的&&&&
&&& & 作者:
&&&& &出处:
&&&&& 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
阅读(...) 评论()}

我要回帖

更多关于 java mongodb insert 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信