小编Par*_*ade的帖子

将Mongo Collection转储为JSON格式

有没有办法将mongo集合转储为json格式?在shell上或使用java驱动程序.我正在寻找性能最佳的.

json dump mongodb

107
推荐指数
3
解决办法
9万
查看次数

同一个MongoDB更新中的$ push和$ set

我正在尝试使用MongoDB的Java驱动程序在同一操作中对记录进行两次更新($ set和$ push).我使用的代码类似于以下内容:

    BasicDBObject pushUpdate = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital));
    BasicDBObject setUpdate = new BasicDBObject().append("$set", new BasicDBObject().append("endTime", time));
    BasicDBList combinedUpdate = new BasicDBList();
    combinedUpdate.add( pushUpdate);        
    combinedUpdate.add( setUpdate);


    collection.update( new BasicDBObject().append("_id", pageId), combinedUpdate, true, false);
Run Code Online (Sandbox Code Playgroud)

当我通过BasicDBList将$ set和$ push组合到同一个更新中时,我得到一个IllegalArgumentException:"存储在db中的字段不能以'$'开头(Bad Key:'$ push')".

如果我进行两次单独的更新,则pushUpdate和setUpdate都会生成有效结果.

谢谢!

java mongodb mongo-java

28
推荐指数
1
解决办法
2万
查看次数

如何使用java驱动程序更新mongo db中的文档字段?

参考文献:

仍然是mongo db的新手,但我正在尝试更新集合中现有文档的一部分......遗憾的是,上面的链接没有更新示例.

基本上,我只是希望能够:

  1. 向文档添加新字段
  2. 将文档的现有字段更新为新值

这是我的代码(Grails + Groovy + Java + MongoDB + java驱动程序):

def shape = mongo.shapes.findOne(new BasicDBObject("data", "http://www.foo.com")); // get the document
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("isProcessed", 0));  // add a new "isProcessed" field set to 0
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("data", "http://www.bar.com"));
Run Code Online (Sandbox Code Playgroud)

这几乎破坏了整个对象...我可能只是尝试修改原始形状对象,然后在其上运行更新.但在那之前,是否有人有更新单个字段(而不是整个文档)的经验?

编辑:

我只是尝试了它,并且能够通过发送整个对象以及新的和/或更新的字段来成功更新.我想知道驱动程序是否足够聪明,只更新最小的更改子集,或者只是盲目更新整个事物?(在下面的例子中,它只是更新电线或整个形状文档的foo字段?)

码:

def shape = mongo.shapes.findOne(); // get the first shape to use as a base
shape.removeField("_id");  // remove the id field
shape.put("foo","bar");  // add a new field "foo"
mongo.shapes.insert(shape); …
Run Code Online (Sandbox Code Playgroud)

java grails groovy mongodb mongo-java

18
推荐指数
3
解决办法
5万
查看次数

如何从驱动程序检查mongoDB服务器是否正在运行

我想知道,如果有办法检查mongoDB服务器是否从mongoDB的java驱动程序运行?

根据教程,我可以做到

Mongo m = new Mongo();
// or
Mongo m = new Mongo( "localhost" , 27017 );
// and
DB db = m.getDB( "mydb" );
Run Code Online (Sandbox Code Playgroud)

但是如何检查我可以使用这些Mongo和DB?我在API中看不到isConnected()方法.

db.getConnector().isOpen() 
Run Code Online (Sandbox Code Playgroud)

返回true

我找到的唯一方法是调用db.getDatabaseNames()并捕获MongoException.

如果有一些更文明的方法?

java mongodb mongo-java

16
推荐指数
3
解决办法
2万
查看次数

如何使用mongoexport导出已排序的数据?

我有一个mongo的集合,它有名字和计数字段.

{name:'myName',count:5}
Run Code Online (Sandbox Code Playgroud)

是否可以通过计数对数据进行排序并使用mongoexport导出为json?

mongodb

16
推荐指数
2
解决办法
1万
查看次数

Mongo打开了太多连接

我试图在Java循环中向MongoDB写入大量数据.我根据打开的连接数得到错误.

我的理论是,由于MongoDB不是事务性的,因此可以同时打开许多连接.然而,Java代码也能够非常快地循环,在一段时间之后,循环迭代的次数开始超过可用连接的数量并且Mongo碰到墙.

我的代码看起来像这样.我已经看到它建议不要这样做m.close()但是你只是更快地得到错误.

public static void upsert(){
    Mongo m = null;
    DB db = null;

    try {
    m = new Mongo("localhost");
    db = m.getDB("sempedia");    } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (MongoException e1) { e1.printStackTrace(); }

    // create documents
    // I am doing an upsert - hence the doc, doc
    DBCollection triples;
try {
        triples = db.getCollection("triples");
        triples.update(doc,doc,true,false); 
    } catch (MongoException e) { e.printStackTrace(); }

    m.close();
}
Run Code Online (Sandbox Code Playgroud)

在我的java控制台中,我收到此错误:

警告:使用0 java.net.SocketException确定maxBSON大小的异常:连接重置

并且mongodb给出了这个错误:

星期二十月二十五日22:31:39 [initandlisten]连接被拒绝,因为太多的开放连接:204中的204

处理这个问题最优雅的方法是什么?

java connection mongodb mongo-java

13
推荐指数
1
解决办法
2万
查看次数

以DBObject(s)的形式检索数组中的子文档

我是MongoDB的新手,我正在使用它和Java驱动程序.我有这个文件结构:

{ "_id" : ObjectId("4f7d2ba6fd5a306d82687d48"), "room" : "Den" }
{ "_id" : ObjectId("4f7d2baafd5a306d82687d49"), "room" : "Foyer" }
{ "_id" : ObjectId("4f7d2fdcfd5a306d82687d4a"), "room" : "Master Bedroom" }
{ "_id" : ObjectId("4f7d301afd5a306d82687d4b"), "room" : "Guest Bedroom" }
{ "_id" : ObjectId("4f7d2b98fd5a306d82687d47"), "code" : "A", "lights" : [ { "name" : "Overhead", "code" : "1" } ], "room" : "Kitchen" }
Run Code Online (Sandbox Code Playgroud)

最后一行特别有兴趣说明我想做什么.每个文档都是一个房间,并且可以具有对应于作为子文档阵列的值的"灯"键.从建模的角度来看,我有一个房子,它有0-n个房间,每个房间都有0-n个灯.我想在Java中做的是将房间的名称作为参数,并返回与灯光阵列中的子文档相对应的DBObject集合 - "让我所有灯光为房间'厨房'",例如.

到目前为止,在TDD风格中逐步进行,我构建了这个查询:

public static final String ROOM_KEY = "room";

public static final String EQUALS_KEY = "$eq";

private BasicDBObject buildRoomNameQuery(String roomName) …
Run Code Online (Sandbox Code Playgroud)

java mongodb mongo-java

11
推荐指数
1
解决办法
3万
查看次数

如何在两个设备(android,iphone)之间传输"数据"?

如何在两台设备之间传输数据?我想在不同平台(android,iphone)之间传输数据(主要是图像文件).是否可以使用p2p或我应该使用客户端服务器?

任何帮助将不胜感激.

android p2p cross-platform data-transfer ios

11
推荐指数
3
解决办法
1万
查看次数

如何在Java中实现回调

我有一个名为CommunicationManager的类,它负责与服务器的通信.

它包括方法login()onLoginResponse().在用户登录的情况下,login()必须调用该方法,并且当服务器响应时,onLoginResponse()执行该方法.

我想要做的是将动作与用户界面绑定.在GUI类中,我创建了一个名为CommunicationManager的实例mCommunicationManager.从GUI类开始,该login()方法简单地由行调用

mCommunicationManager.login();
Run Code Online (Sandbox Code Playgroud)

我不知道怎么做是将方法从GUI类绑定到onLoginResponse().例如,如果GUI类包括notifyUser()显示从服务器接收的消息的方法.

我真的很感激,当类GUI.notifyUser()的实例mCommunicationManager从服务器接收消息并执行方法时,任何人都可以展示如何绑定方法以便从GUI类(例如)CommunicationManager.onLoginResponse()执行方法.

谢谢!

asynchronous callback

10
推荐指数
1
解决办法
3万
查看次数

如何序列化类?

当我将一个List插入mongodb时,有一个问题:

Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class mongodb.Person
    at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:234)
    at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:259)
    at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:198)
    at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:140)
    at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:86)
    at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
    at com.mongodb.OutMessage.putObject(OutMessage.java:142)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:252)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:211)
    at com.mongodb.DBCollection.insert(DBCollection.java:57)
    at com.mongodb.DBCollection.insert(DBCollection.java:87)
    at com.mongodb.DBCollection.save(DBCollection.java:716)
    at com.mongodb.DBCollection.save(DBCollection.java:691)
    at mongodb.MongoDB.main(MongoDB.java:45)
Run Code Online (Sandbox Code Playgroud)

Person类定义如下:

class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

该计划是:

        DBCollection coll = db.getCollection("test");
        DBObject record = new BasicDBObject();
        List<Person> persons= …
Run Code Online (Sandbox Code Playgroud)

java mongodb mongo-java

10
推荐指数
1
解决办法
1万
查看次数