我想将不同的数据存储到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)
但有了反思.
你还有其他建议吗?
提前致谢.
我想在创建复合索引Age和Name 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索引呢?
我正在寻找一种方法来检索executionStats聚合.
使用find()时,我可以使用explain轻松检索它们.示例输出:
"executionStats": {
"nReturned": 332505,
"executionTimeMillis": 1349,
"totalKeysExamined": 332505,
"totalDocsExamined": 332505,
...
Run Code Online (Sandbox Code Playgroud)
但是当使用启用了解释的聚合时,它将不会返回上面显示的统计数据.
这与此有关,但没有给出可行的解决方案.因为这可能在此期间发生了变化,我打开了这个问题.
如果不测量客户端的统计数据,有什么方法可以做到这一点吗?
我有一个简单的数据结构(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(...) …
我们有一个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) 我刚刚在我的系统上安装了 mongodb,我想知道是否可以在 mongodb 中插入 blob 数据。程序是什么,是否需要任何其他软件?
我们当前的连接配置如下所示:
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属性来控制连接超时."
我认为重试和连接超时是两个不同的事情.有谁知道为什么这会改变以及这有什么(内部)影响?
请参阅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) 我试图寻找一个示例或使用ClusterListener来优化和改进与MongoDB Java客户端集成的服务的调试信息.
我们如何有效地使用Replication来改进我们的Mongo集群?
java mongodb database-replication mongodb-java mongo-java-driver
在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收集
这会在以后的版本中出现还是我错过了一些注释或配置步骤?