Tag: mongodb

mongodb ISODate问题

我正在使用java(IDE是eclipse)来查询mongodb。 下面是我的java代码: DBObject query = new BasicDBObject(); ObjectId id =new ObjectId(“529f280b90ee58cb7732c2b8”); query.put(“_id”, id); DBCursor cursor = collection.find(query); while(cursor.hasNext()) { DBObject object = (DBObject)(cursor.next()); System.out.println(object.get(“_id”)); System.out.println(object.get(“createDate”)); } createDate中出现问题,其类型为ISODate,值为ISODate(“2013-10-21T01:34:04.808Z”) ,但我的代码的println结果为’Mon Oct 21 **09**:34:04 CST 2013′ , 小时从01变为09 。 我不知道发生了什么! 有人可以帮忙吗?

mongodb表现不佳

我目前正在使用mongodb,我看到查询的性能非常差(可能需要几秒钟)。 方案如下: 我有一个结构文件: {_id:”xxx”, userId:”yyy”, a:1 ,b:2, counter:1} 在测试中: “userId” value could be {1..200,000} “a” values could be {1..30} “b” values could be {1} 因此,我的最大大小集合将为6,000,000。目前,为此集合定义了两个索引: default _id and useId 业务逻辑查询所有用户条目,然后通过递增计数器来更新一个特定用户条目(查询更新由“_id”写入)。 此外,如果这是一个新实体,则有一个插入查询。 我在ubuntu上使用mongo 1.8.2和8g ram运行 我有一个主辅助复制(所有mongo运行本地磁盘存储和一个子网与tomcat服务器)。 当然所有的读取都是二级的,并写入master。 我没有测试分片,因为我认为6,000,000不是一个巨大的collections,不是吗? 另外,我运行jmetter测试,一次使用不同的userIds生成500个线程请求。 当我运行mongostat时,我看到%锁定非常高(大约70%),大约5-10分钟的加载后我看到qw(写入队列)是500(作为我打开的连接的数量)当我停止服务器需要mongo大约10-20分钟来完成所有排队的任务 我也运行了db.serverStatus()并解释,结果看起来很好。 当我运行db.currentOp()时,我看到等待’write’锁定的查询我无法将currentOp的输出文件完全分析,因为我从命令行执行查询并且只有窗口缓冲区尺寸。 但是从那里我看到了许多等待写锁的更新(通过_id)。 我会感激任何想法。 还有一件事:因为每个查询可能会带来30个文档,我认为可能会有不同的moddeling如下: {_id:”xxx”, userId:”123″, bs: [{b:1, cs[{c:1, cnt:1}, {c:2, cnt:1}}, {{b:2 cs: [{c:1, […]

使用Mongo-Hadoop连接器通过Apache Spark更新MongoDb中的集合

我想通过Spark in Java更新MongoDb中的特定集合。 我正在使用MongoDB Connector for Hadoop在Java中检索Apache Spark到MongoDb的信息。 在关注Sampo Niskanen关于通过Spark检索和保存MongoDb集合的优秀post后,我对更新集合感到困惑 。 MongoOutputFormat.java包含一个构造函数,它使用String [] updateKeys,我猜这是指一个可能的键列表,用于比较现有集合并执行更新。 但是,使用Spark的saveAsNewApiHadoopFile()方法和参数MongoOutputFormat.class ,我想知道如何使用该更新构造函数。 save.saveAsNewAPIHadoopFile(“file:///bogus”, Object.class, Object.class, MongoOutputFormat.class, config); 在此之前, MongoUpdateWritable.java用于执行集合更新。 从我在Hadoop上看到的例子来看,这通常是在mongo.job.output.value上mongo.job.output.value ,在Spark中可能是这样的: save.saveAsNewAPIHadoopFile(“file:///bogus”, Object.class, MongoUpdateWritable.class, MongoOutputFormat.class, config); 但是,我仍然想知道如何在MongoUpdateWritable.java指定更新密钥。 不可否认,作为一种hacky方式,我将对象的“_id”设置为我的文档的KeyValue,以便在执行保存时,集合将覆盖与_id具有相同KeyValue的文档。 JavaPairRDD analyticsResult; //JavaPairRdd of (mongoObject,result) JavaPairRDD save = analyticsResult.mapToPair(s -> { BSONObject o = (BSONObject) s._1; //for all keys, set _id to key:value_ […]

如何按内部数组大小对MongoDB查询结果进行排序?

我正在使用Morphia访问mongoDB。 我需要按内部数组的长度获取对象列表。 有没有人知道如何在不将所有集合转换为Java并将其排序的情况下完成它?

如何更喜欢在MongoDb中读取二进制文件

在副本集配置中使用mongodb时(1个仲裁器,1个主要,2个从属); 如何设置读取对辅助节点执行的首选项,并将主节点仅用于写入? 我正在和Morphia一起使用MongoDb 2.0.4。 我看到有一个slaveOk()方法,但我不确定它是如何工作的。 Morphia http://code.google.com/p/morphia/ 详细信息 My Mongo设置有以下选项: mongo.slaveOk(); mongo.setWriteConcern(WriteConcern.SAFE); 我试图使用以下(这可能是答案-btw): 数据存储区ds = getDatastore(); 查询 query = ds.find(MyEntity.class).field(“entityId”)。equal(entityId); query.queryNonPrimary(); //看起来等同于ReadPrefererence.secondary() MyEntity entity = query.get();

关闭MongoDB Java连接

我正在尝试设计一个Mongo Db连接类,我将MongoClient设置为静态。 private static MongoClient client = null; public static DB connectToMongo() throws Exception { if (null != client) { return client.getDB(DBNAME); } client = new MongoClient(HOST,PORT); return client.getDB(DBNAME); } 我的整个Web应用程序使用上面的方法连接到Mongo,如下所示: db = MongoDBConnection.connectToMongo(); collection = db.getCollection(“collectionName”); 执行数据库操作后,我从不为MongoClient调用close连接。 连接类总是会返回相同的MongoClient实例,它永远不会关闭。我关闭的唯一内容就是游标。 每次查询数据库时是否需要关闭MongoClient? 我的上述设计有效吗?

我们如何使用mongoTemplate为Mongodb Collection实现分页

我是mongoDb中的菜鸟我需要为任何特定的集合实现分页,比如说 我有一个Collection Foo,我有一个Fucntion,它返回Foo集合中的所有记录 public List getFoo(){ } 但是我需要通过实现分页从Foo中获取记录如何通过使用mongoTemplate Spring数据mongodb来实现这一点?

加密mongodb中的密码字段

我有以下代码,它将userName和password插入数据库,但密码以纯文本格式存储。 我的意思是当我查看数据库时,我可以看到插入的密码。 我想以encrypted格式存储password MongoClient client = new MongoClient(“localhost”,27017); DB db = client.getDB(“Test”); DBCollection collection = db.getCollection(“EncryptionDemo”); BasicDBObject documentDetail = new BasicDBObject(); documentDetail.put(“userName”, “admin12”); documentDetail.put(“password”, “12345”); collection.insert(documentDetail); 我怎样才能做到这一点?

使用Joda-Time为Mongo插入形成正确的ISODate

我正在尝试更新需要ISODate格式的mongo中的日期字段。 在mongo中,它看起来像这样: “crDt” : ISODate(“2013-08-19T17:21:57.549Z”) 我正在使用的Java框架限制使用字符串作为我的测试参数,所以我试图将该字符串与DateTimeFormatter一起使用,以使其进入正确的ISODateTimeFormat ,然后将其传递给mongo。 我不能只传入一个看起来像我上面的字符串。 试图这样做搞砸了mongo的领域。 我正在使用的Joda-Time代码的相关位如下所示: //I can’t get this right. String crDt = “2013-01-19T15:28:58.851Z”; DateTimeFormatter parser = ISODateTimeFormat.dateHourMinuteSecondMillis(); parser.parseDateTime(crDt); // this method updates the record in mongo. This method totally works, so no // point in pasting it here, I just can’t get the parser object correct to be // […]

MongoDB Java驱动程序3.x:如何将allowDiskUse = true传递给aggregate()方法?

我正在使用mongo-java-driver 3.0.2 。 我有一个方法,使用MongoCollection.aggregate(List pipeline)来排序和限制: private static MongoIterable selectTop(int n) { BasicDBObject sortFields = new BasicDBObject(“score”, -1); BasicDBObject sort = new BasicDBObject(“$sort”, sortFields); BasicDBObject limit = new BasicDBObject(“$limit”, n); List pipeline = new ArrayList(); pipeline.add(sort); pipeline.add(limit); return playersCollection.aggregate(pipeline); } 当n很大时,它失败了: com.mongodb.MongoCommandException: Command failed with error 16820: ‘exception: Sort exceeded memory limit of 104857600 bytes, but […]