标签: mongodb-java

从 spring mongo 中删除数据库

我想在集成测试之前将数据库放入我的 mongo 中。是否可以通过 spring mongo 来做到这一点?

如果现在不可用,是否可以从 spring mongo 以某种方式获取 com.mongodb.DB 对象,以便我可以调用它的 dropDatabase() ?

mongodb-java spring-data-mongodb

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

使用mongodb的java驱动,如何在同一个字段上搜索多个值?

我对 mongo 有点陌生。我想在一个字段上查询多个值。在 SQL 中,我想要这样的东西:

select * from table where field in ("foo","bar")
Run Code Online (Sandbox Code Playgroud)

假设我在mongodb中有以下文件

{
  "_id":"foo"
}
{
  "_id":"bar"
}
Run Code Online (Sandbox Code Playgroud)

我只是想模仿这个查询:

db.coll.find( { _id: { $in: [ "foo", "bar" ] } } );
Run Code Online (Sandbox Code Playgroud)

我想检索 _id 为“foo”或“bar”的所有文档。我想使用 java 驱动程序来做到这一点。

我试过类似的东西

BasicDBObject query = new DBObject()
query.append("_id","foo");
query.append("_id","bar");
collection.find(query);
Run Code Online (Sandbox Code Playgroud)

但这似乎只返回“bar”文件。

请帮忙

mongodb mongodb-java

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

如何检索 Mongo DB 中数组中存在的所有匹配元素?

我有如下所示的文件:

{
  name: "testing",
  place:"London",
  documents: [ 
                        {   
                            x:1,
                            y:2,
                        },
                        {
                            x:1,
                            y:3,
                        },
                        {
                            x:4,
                            y:3,
                        }
            ]
    }
Run Code Online (Sandbox Code Playgroud)

我想检索所有匹配的文档,即我想要以下格式的 o/p:

{
    name: "testing",
    place:"London",
    documents: [ 
                        {   
                            x:1,
                            y:2,
                        },
                        {
                            x:1,
                            y:3,
                        }

            ]
    }
Run Code Online (Sandbox Code Playgroud)

我尝试过的是:

db.test.find({"documents.x": 1},{_id: 0, documents: {$elemMatch: {x: 1}}});
Run Code Online (Sandbox Code Playgroud)

但是,它只提供第一个条目。

mongodb mongodb-java mongodb-query spring-data-mongodb

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

MongoDB SELF JOIN 查询有 1 个集合

我想做类似的事情

SELECT e1.sender
FROM email as e1, email as e2
WHERE e1.sender = e2.receiver;
Run Code Online (Sandbox Code Playgroud)

但在 MongoDB 中。找了很多关于JOIN的论坛,可以通过MongoDB中的MapReduce实现,但是在这个例子中用self-join不明白怎么做。

我在想这样的事情:

var map1 = function(){
     var output = {
         sender:db.collectionSender.email, 
         receiver: db.collectionReceiver.findOne({email:db.collectionSender.email}).email
         }
     emit(this.email, output);                    
};
var reduce1 = function(key, values){
     var outs = {sender:null, receiver:null 
     values.forEach(function(v) {
       if(outs.sender == null){ 
          outs.sender = v.sender
          }
       if(outs.receivers == null){
          outs.receiver = v.receiver
          }        
 });
     return outs; }};
 db.email.mapReduce(map2,reduce2,{out:'rec_send_email'})
Run Code Online (Sandbox Code Playgroud)

创建 2 个新集合 - collectionReceiver 仅包含接收者电子邮件和 collectionSender 仅包含发件人电子邮件

或者

var map2 = function(){
     var output = …
Run Code Online (Sandbox Code Playgroud)

java json self-join mongodb mongodb-java

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

当副本集在本地 IP 地址上相互连接时,连接到远程 MongoDB 副本集

我们在本地网络接口(即192.168.1.x)上设置了一个mongo副本集。副本集成员是唯一知道此接口的成员。这些实例也位于可从我们的网络内部 (10.xxx) 寻址的外部接口上。当尝试仅使用 Java 驱动程序[2.10.1](通过gMongo 包装器)连接到“主节点”时,我们遇到了一个问题,即由于应用程序无法确定其他副本节点而无法建立连接。即使我提供服务器列表中的所有外部接口,也会发生这种情况。

我还需要能够设置从我的计算机到副本集的 SSH 隧道。我再次遇到了同样的问题,因为副本集提供了不适用于我的主机名和 IP 地址。

当副本仅通过本地 IP 地址相互了解时,如何连接到副本集?

以下是代码示例以及由此产生的错误。下面的示例假设已设置从本地主机到远程服务器的隧道。

@Grab(group='com.gmongo', module='gmongo', version='1.1')

import com.gmongo.*
import com.mongodb.*

def hosts= [
        [host:'127.0.0.1', port:29017],
        //[host:'127.0.0.1', port:29018],  //have tried with and without the others commented
        //[host:'127.0.0.1', port:29019],
        ]

List<ServerAddress> addrs = hosts.collect {it.port?new ServerAddress(it.host, it.port):new ServerAddress(it.host)}
MongoClientOptions clientOptions = new MongoClientOptions.Builder().build()
def mongo = new GMongoClient(addrs, clientOptions)
def db = mongo.getDB("mydb")

def result = db.tickets.findOne([:])

println result
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

WARNING: couldn't resolve host [mongo03:27017]
May 16, 2013 …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-java gmongo

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

使用 mongo Java Driver 3.0 从 Mongo 集合中获取字段的不同值时出现异常

我从 mongodb 获得了不同的字段值。当我在命令行中运行以下查询时,效果很好。 db.celldata.distinct("tenentId")

我正在使用 Mongo java 3.0 驱动程序,使用以下查询检索不同的值 MongoCursor<String> iterator = coll.distinct("tenantId", String.class).iterator();

当我运行查询时,出现以下异常 org.bson.BsonInvalidOperationException: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is NULL.

java mongodb mongodb-java mongodb-query

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

Spring Data-MongoDb聚合方法的选项

如何在Spring Data-MongoDB框架的聚合方法中设置“ allowDiskUse ”选项?

mongodb mongodb-java spring-data aggregation-framework spring-data-mongodb

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

在Spring Data Mongo中设置自定义转换器

我们正在尝试为此设置我们自己的转换器,Spring Data Mongo并遇到了问题。

好像Spring从不要求registerConvertersIn使用CustomConversions,因此通过重写添加的自定义转换器AbstractMongoConfiguration#customConversions永远不会成为转换的一部分。

我们正在使用Spring Data Mongo 1.6.3,但对于1.8.0来说似乎也可能是个问题(我检查了对的调用,CustomConversions#registerConvertersIn但均未找到。)

我可以通过这样的CustomConversions#registerConvertersIn自定义调用来解决此问题MappingMongoConverter

class MongoConfig extends AbstractMongoConfiguration {
    @Bean
    @Override
    public MappingMongoConverter mappingMongoConverter() throws Exception {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
        MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext()) {
            @Override
            public void setCustomConversions(CustomConversions conversions) {
                super.setCustomConversions(conversions);
                conversions.registerConvertersIn(conversionService);
            }

        };
        converter.setCustomConversions(customConversions());
        return converter;
    }
}
Run Code Online (Sandbox Code Playgroud)

那是一个错误还是我们做错了什么?

找到了另一种解决方法:https : //stackoverflow.com/a/14369998/4567261

java spring mongodb mongodb-java spring-data-mongodb

2
推荐指数
4
解决办法
4640
查看次数

MongoDB:使用Java驱动程序

我在这里学习MongoDB.我坚持使用MongoDB Java驱动程序执行非常基本的操作.我试图从文档中的数组中删除一个元素.该文件如下:

db.test.find().pretty()
{
    "_id" : ObjectId("581245dd51030d389f5cf701"),
    "name" : "Rahul",
    "scores" : [
        {
            "SDM" : 97
        },
        {
            "SE" : 96
        },
        {
            "DM" : 80
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试图删除数组中的第二个元素即{"SE" : 96}.我明白我可以用这个来实现coll.update(match, new BasicDBObject("$pull", update));.但是我想利用这个com.mongodb.client.model.Updates.pull(final String fieldName, final TItem value)方法.

这是我在发布问题之前尝试过的:

1)当我尝试这个时,我没想到会发生任何事情,而且确实没有对文件进行任何修改.

  ` Bson filter = Filters.eq("name", "Rahul");
    Bson delete = Updates.pull("SE", 96);
    collection.updateOne(filter, delete);`
Run Code Online (Sandbox Code Playgroud)

2)以下是抛出异常.

  ` Bson filter = Filters.eq("name", "Rahul");
    Bson delete = Updates.pull("scores.SE", 96);
    collection.updateOne(filter, delete);`
Run Code Online (Sandbox Code Playgroud)

例外:

Exception in thread …
Run Code Online (Sandbox Code Playgroud)

arrays mongodb mongodb-java mongodb-query

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

使用Java从mongodb读取blob(二进制)数据时出错

我无法使用Java 3.4.2驱动程序从MongoDB中读取blob(二进制)记录。

    BasicDBObject whereClause = new BasicDBObject();
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
    obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000"));
    whereClause.put("$and", obj);

    MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator();

    while (cursor.hasNext()) {
        Document object = cursor.next();
        System.out.println(object.getString("blobcontentid"));
        if (object.get("content") != null){
            byte[] content = (byte []) object.get("content");   
        } else {
            System.out.println("Content is empty");
        }           
    }
Run Code Online (Sandbox Code Playgroud)

错误:java.lang.ClassCastException:org.bson.types.Binary无法转换为[B

在DB2中,相同的记录正在读取。byte [] content = aResult.getBytes(“ CONTENT”);

先感谢您!巴拉提

java mongodb mongodb-java

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