标签: mongodb-java

Spring Data MongoDb用于类继承

我想将不同的数据存储到MongoDb中的一个集合中,并使Spring数据bean具有适当的字段.

对不起,我已经跳过了细节.

父豆:

class A
    int a
Run Code Online (Sandbox Code Playgroud)

柴尔兹:

class B extends A
    double b

class C extends A
    String c
Run Code Online (Sandbox Code Playgroud)

所以,mongo中有以下文档

{a : 1, b : 2.3, c : "Test"}
Run Code Online (Sandbox Code Playgroud)

当我获取数据时,它没问题.但是,当我从CrudRepository for B 调用save方法时,它会重写所有数据并且我输了C.

我知道只有一个很好的选择来创建具有增量更新的自定义保存方法,例如

update.set("b", newvalue)...
Run Code Online (Sandbox Code Playgroud)

但有了反思.

你还有其他建议吗?

提前致谢.

java mongodb mongodb-java spring-data

9
推荐指数
1
解决办法
9416
查看次数

如何通过Java驱动程序在MongoDB中创建复合索引?

我想在创建复合索引AgeName MongoDB中通过Java驱动程序,这是我的语法:

coll.ensureIndex(new BasicDBObject("Age", 1),new BasicDBObject("Name", -1));
List <DBObject> list = coll.getIndexInfo();

  for (DBObject o : list) {
       System.out.println(o);
    }
Run Code Online (Sandbox Code Playgroud)

但它只创建1个索引而不是compund索引并给出结果:

{ "v" : 1 , "key" : { "_id" : 1} ,"ns" :"EmployeeData.EmpPersonalData", "name":"_id_"}
{ "v" : 1 , "key" : { "Age" : 1} , "ns" : "EmployeeData.EmpPersonalData" , "name" : "Age_1" , "Name" : -1}
Run Code Online (Sandbox Code Playgroud)

那么如何通过java驱动程序创建集合上的compund索引呢?

java indexing mongodb mongodb-java

9
推荐指数
2
解决办法
8491
查看次数

MongoDB为聚合查询获取executionStats

我正在寻找一种方法来检索executionStats聚合.

使用find()时,我可以使用explain轻松检索它们.示例输出:

  "executionStats": {
    "nReturned": 332505,
    "executionTimeMillis": 1349,
    "totalKeysExamined": 332505,
    "totalDocsExamined": 332505,
    ...
Run Code Online (Sandbox Code Playgroud)

但是当使用启用了解释的聚合时,它将不会返回上面显示的统计数据.

有关,但没有给出可行的解决方案.因为这可能在此期间发生了变化,我打开了这个问题.

如果不测量客户端的统计数据,有什么方法可以做到这一点吗?

mongodb mongodb-java mongodb-query

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

Mongodb:`com.mongodb.MongoSocketReadException:过早地到达流的末端`与morphia

我有一个简单的数据结构(Transaction下面引用)插入到mongodb中:

{"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"}
Run Code Online (Sandbox Code Playgroud)

我得到以下错误堆栈:

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at com.mongodb.connection.SocketStream.read(SocketStream.java:88)
        at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:494)
        at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:224)
        at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:96)
        at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:440)
        at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.java:262)
        at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:104)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:67)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:37)
        at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
        at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
        at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.java:118)
        at com.mongodb.operation.InsertOperation.executeCommandProtocol(InsertOperation.java:76)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:139)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:133)
        at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422)
        at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:133)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:60)
        at com.mongodb.Mongo.execute(Mongo.java:845)
        at com.mongodb.Mongo$2.execute(Mongo.java:828)
        at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:342)
        at com.mongodb.DBCollection.insert(DBCollection.java:337)
        at com.mongodb.DBCollection.insert(DBCollection.java:328)
        at org.mongodb.morphia.DatastoreImpl.saveDocument(DatastoreImpl.java:1297)
        at org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate(DatastoreImpl.java:1340)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1286)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:775)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:758)
Run Code Online (Sandbox Code Playgroud)

我的mongodb版本是3.4.2.

Intereting是我在我的本地开发环境中没有问题(mint linux 18.1).但它无法在我的SIT环境中运行,这是一个ubuntu 16.04

任何的想法?

使用代码更新以插入文档

在此输入图像描述

在哪里transactionDao.save(...) …

mongodb morphia mongodb-java

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

通过Mongo API连接到CosmosDB在空闲后失败

我们有一个Scala服务器,它使用Casbah包装的Java MongoDB驱动程序.最近,我们使用Mongo API将其数据库从实际的MongoDB切换到Azure CosmosDB.这通常工作正常,但是每隔一段时间对Cosmos的调用就会因MongoSocketWriteException(下面的堆栈跟踪)而失败.

我们正在创建客户端

import com.mongodb.casbah.Imports._

val mongoUrl = "mongodb://username:password@host.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"

val client = MongoClient(MongoClientURI(mongoUrl))
val collection: MongoCollection = client("mongoDatabase")("mongoCollection")
Run Code Online (Sandbox Code Playgroud)

我们尝试&replicaSet=globaldb根据建议的解决方法从连接URI中删除这个看似类似的错误(如何解决MongoError:池连接到CosmosDB时被破坏),但它没有解决问题.

堆栈跟踪:

com.mongodb.MongoSocketWriteException: Exception sending message
    at com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:462)
    at com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:205)
    at com.mongodb.connection.UsageTrackingInternalConnection.sendMessage(UsageTrackingInternalConnection.java:95)
    at com.mongodb.connection.DefaultConnectionPool$PooledConnection.sendMessage(DefaultConnectionPool.java:424)
    at com.mongodb.connection.CommandProtocol.sendMessage(CommandProtocol.java:209)
    at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:111)
    at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159)
    at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)
    at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:173)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:215)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:206)
    at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:112)
    at com.mongodb.operation.CountOperation$1.call(CountOperation.java:210)
    at com.mongodb.operation.CountOperation$1.call(CountOperation.java:206)
    at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:230)
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:203)
    at com.mongodb.operation.CountOperation.execute(CountOperation.java:206)
    at com.mongodb.operation.CountOperation.execute(CountOperation.java:53)
    at com.mongodb.Mongo.execute(Mongo.java:772)
    at com.mongodb.Mongo$2.execute(Mongo.java:759)
    at com.mongodb.DBCollection.getCount(DBCollection.java:962)
    at com.mongodb.DBCursor.count(DBCursor.java:670)
    at com.mongodb.casbah.MongoCollectionBase.getCount(MongoCollection.scala:496)
    at com.mongodb.casbah.MongoCollectionBase.getCount$(MongoCollection.scala:488) …
Run Code Online (Sandbox Code Playgroud)

azure mongodb casbah mongodb-java azure-cosmosdb

9
推荐指数
1
解决办法
2046
查看次数

如何在mongodb中插入blob数据,是否需要任何额外的软件

我刚刚在我的系统上安装了 mongodb,我想知道是否可以在 mongodb 中插入 blob 数据。程序是什么,是否需要任何其他软件?

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

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

MongoDB Java驱动程序:autoConnectRetry

我们当前的连接配置如下所示:

MongoClientOptions.builder()
    .autoConnectRetry(true).maxAutoConnectRetryTime(1200000)
    .socketTimeout(30000).connectTimeout(15000).build();
     // SocketTimeout: 30s, ConnectionTimeout 15s, ReconnectRetry: 20min
Run Code Online (Sandbox Code Playgroud)

autoConnectRetry并且maxAutoConnectRetryTime在当前版本(源代码)中已弃用并将被删除:"此方法没有替代.使用connectTimeout属性来控制连接超时."

我认为重试和连接超时是两个不同的事情.有谁知道为什么这会改变以及这有什么(内部)影响?

java mongodb mongodb-java

8
推荐指数
1
解决办法
5934
查看次数

如何在java中创建mongoDB objectid

请参阅post 如何使用Java将数组添加到MongoDB文档? 我已经使用java创建了一个mongo架构,它有子元素,我得到_id的主文档我想_id在子元素中也在这里输出看起来(我已经标记了我需要的部分_id) b.party.find().pretty();

{

"_id" : ObjectId("5399aba6e4b0ae375bfdca88"),
"addressDetails" : [
    {
        //   _id here
        "locationName" : "Office",
        "phones" : [
            {   //   _id here   
                "name" : "Tel1",
                "value" : "95253-"
            },
            {   //   _id here
                "name" : "Tel2",
                "value" : "95253-"
            },
            {   //   _id here
                "name" : "Tel3",
                "value" : "95253-"
            },
            {   //   _id here
                "name" : "Fax1",
                "value" : "0253-"
            }
        ],
        "address" : "A-3,MIDCA-3,MIDC",
        "defaultBillAddrerss" : "",
        "pincode" : …
Run Code Online (Sandbox Code Playgroud)

java mongodb mongodb-java

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

我们如何在Mongo中使用ClusterListener?

我试图寻找一个示例或使用ClusterListener来优化和改进与MongoDB Java客户端集成的服务的调试信息.

我们如何有效地使用Replication来改进我们的Mongo集群?

java mongodb database-replication mongodb-java mongo-java-driver

8
推荐指数
1
解决办法
855
查看次数

MongoDB Java驱动程序3.5支持POJO中的参考字段

在mongodb java驱动程序3.5版本中,添加POJO映射的 "官方支持" .

但它似乎没有提到将类映射到特定集合或将类的pojo字段存储在单独的集合中而不是嵌入它的任何内容.

鉴于:

public class Address {
    public ObjectId id;
    public String zipcode;
}

//elsewhere
public class Person {
    public ObjectId id;
    public Address address;
}
Run Code Online (Sandbox Code Playgroud)

你如何让这个插入一个Person实例实际上插入类似{id={some oid}, address={oid1}}people集合,并{id={oid1}, zip={some zipcode}}addresses收集

这会在以后的版本中出现还是我错过了一些注释或配置步骤?

java mongodb mongodb-java

8
推荐指数
0
解决办法
357
查看次数