标签: mongodb-java

为什么mongo会修剪空间?

我注意到在将文档保存到集合时,MongoDB将多个空间折叠在一起(放入一个空间).它不仅仅是前导和尾随空格,而是任何空间序列 - 只有空格,而不是所有空格(仅用空格和制表符测试).当使用Java驱动程序以及交互式mongo shell时会发生这种情况,所以我猜它是数据存储区本身的"特性".

不可否认,我不喜欢我的价值观中无关的空白,我在剥离它们的过程中发现了这一点.但是,这种行为似乎很奇怪,因为数据存储通常被期望避免"烹饪"或以其他方式更改数据,超出符合底层存储约束的最低限度.否则(未向用户/开发人员声明)可能导致数据丢失或精度降低.此外,为什么要折叠空间而不是在头部和尾部完全修剪它们 - 为什么它们会在非空间角色之间折叠呢?

    > db.test.remove()
    > db.test.save({x: "     x     \t\t\t     x     "})
    > db.test.findOne()
    { "x" : " x \t\t\t x " }
Run Code Online (Sandbox Code Playgroud)

我是否错误地启用了此功能,还是默认启用?我在JIRA上找不到任何东西.这对我来说似乎是一个错误,但也许我只是特别的.MongoDB版本2.0.2

mongodb mongodb-java mongo-shell

6
推荐指数
1
解决办法
1715
查看次数

MongoDB全文搜索索引:错误:文本索引太多,为什么?

我有一个问题,我有收集,我想将文本搜索索引设置为2个字段(描述和标题).但是,当我添加第二个索引时,我得到以下错误,文本搜索停止工作.

{ "serverUsed" : "localhost/127.0.0.1:27017" , "ok" : 0.0 , "errmsg" : "too many text index for: testdb.users"}
Run Code Online (Sandbox Code Playgroud)

当我删除一个索引搜索再次开始工作.问题是什么?一个集合仅支持一个字段的全文搜索索引????

我在windows下使用当前版本的mongodb,我正在使用mongodb java驱动程序API.

谢谢

java full-text-search mongodb mongodb-java

6
推荐指数
1
解决办法
2391
查看次数

驱动程序操作已中断(mongodb异常)

我在创建连接时使用mongo数据库为我的应用程序连接假脱机配置了下面的mongoOption

MongoOptions options = new MongoOptions();
   options.autoConnectRetry = true;
   options.connectionsPerHost = 40;
   options.threadsAllowedToBlockForConnectionMultiplier = 25;
Run Code Online (Sandbox Code Playgroud)

除了我的应用程序,获得以下异常

com.mongodb.MongoInterruptedException: A driver operation has been interrupted
at com.mongodb.DBPortPool.get(DBPortPool.java:216)
at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:440)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:177)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:349)
at com.mongodb.DBCollection.update(DBCollection.java:177)
at com.mongodb.DBCollection.save(DBCollection.java:817)
at com.mongodb.DBCollection.save(DBCollection.java:785)
at cherrypick.ck.datalayer.mongo.MongoDataAccessLayer.saveObject(MongoDataAccessLayer.java:361)
at cherrypick.ck.emailinterface.CKMailMonitor.processIncomingMessage(CKMailMonitor.java:170)
at cherrypick.ck.emailinterface.CKMailMonitor.monitorNewMessages(CKMailMonitor.java:253)
at cherrypick.ck.emailinterface.CKMailMonitor.run(CKMailMonitor.java:275)
Caused by: java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1325)
at java.util.concurrent.Semaphore.tryAcquire(Semaphore.java:414)
at com.mongodb.util.SimplePool.permitAcquired(SimplePool.java:148)
at com.mongodb.util.SimplePool.get(SimplePool.java:110)
at com.mongodb.DBPortPool.get(DBPortPool.java:214)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题.

在此先感谢Raja Subramani

mongodb-java

6
推荐指数
1
解决办法
4407
查看次数

PersistenceConstructor参数变量名称与实例变量名称不匹配

我试图用spring-data-mongodb版本持久保存以下对象1.1.1.RELEASE:

@Document
public static class TestObject {

    private final int m_property;

    @PersistenceConstructor
    public TestObject(int a_property) {
        m_property = a_property;
    }

    public int property() {
        return m_property;
    }

}
Run Code Online (Sandbox Code Playgroud)

MappingException当我尝试从数据库中读取对象时,我得到了一个(参见下面的完整堆栈跟踪)

我的组使用的命名约定要求参数变量名称a_以及前面的实例变量名称开头m_.似乎spring-data-mongodb假设构造函数参数变量名必须与对象实例变量名匹配.

  • 为什么不spring-data-mongodb将构造函数参数用于我在构造函数中定义的实例变量映射?
  • 是否有另一种方法来定义此映射,以便spring-data-mongodb正确构造我的对象,或者是我打破命名约定的唯一选择?

.

Exception in thread "main" org.springframework.data.mapping.model.MappingException: No property a_property found on entity class com.recorder.TestRecorder$TestObject to bind constructor parameter to!
    at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:90)
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:70)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:229)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:209)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:173)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:169)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:72) …
Run Code Online (Sandbox Code Playgroud)

java naming-conventions mongodb-java spring-data spring-data-mongodb

5
推荐指数
1
解决办法
8868
查看次数

$cond运算符java代码

我有一个聚合查询如下:

db.TWITTER_DATA_Processed.aggregate( {$match : { SpId : 840, Scheduler_id : "SCH_01" }},{$group : {_id : {SpId : "$SpId", Scheduler_id : "$Scheduler_id",Country : "$Country"}, positive_count :  { $sum: { $cond: [ { $gt: [ "$Sentiment", 0 ] } , 1, 0 ] } }, neutral_count :  { $sum: { $cond: [ { $eq: [ "$Sentiment", 0 ] } , 1, 0 ] } }, negative_count :  { $sum: { $cond: [ { $lt: [ "$Sentiment", 0 ] } , 1, 0 …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-java aggregation-framework

5
推荐指数
1
解决办法
3808
查看次数

MongoDB 是否为用户提供文档级访问权限?

我有一些集合,我希望用户有权访问基于“标签”字段的文档(行)。因此,user1 在查询集合时只能看到 tag = user1 的文档。

mongodb mongodb-java mongodb-query

5
推荐指数
1
解决办法
4941
查看次数

MongoDB java 驱动程序 - 大量停放线程

从长远来看,我发现 MongoDB Java 驱动程序 (v3.0.3) 堆积了大量线程。所有这些线程都是服务器监控线程,全部停放等待:

cluster-ClusterId{value='562233d1b26c940820028340', description='null'}-192.168.0.2:27017
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
    com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.waitForSignalOrTimeout(DefaultServerMonitor.java:237)
    com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.waitForNext(DefaultServerMonitor.java:218)
    com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:167)
    java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

目前约有 250 人。我认为不需要很多线程来监视与单个数据库主机的连接。我显然做错了什么......,但据我所知,当从驱动程序 v2 移动到 v3 时,我们没有做任何设置更改。可能是驱动程序的错误?有任何想法吗?

mongodb mongodb-java

5
推荐指数
1
解决办法
1651
查看次数

Spring Data MongoDB 并发更新行为

假设有一个包含单个字段的文档:{availableSpots: 100}

数以百万计的用户竞相通过向 API 服务器发送请求来获得席位。

每次收到请求时,服务器都会读取文档,如果 availableSpot > 0,则会将其减 1 并在另一个集合中创建预订。

现在我读到每当执行更新操作时 mongodb 都会锁定文档。

如果有一百万个并发请求会发生什么?是否会因为同一个文档不断被锁定而需要很长时间?此外,服务器在尝试更新文档之前会读取文档的值,并且当它获取锁时,该位置可能不再可用。

线程也有可能在同一时刻获得“availableSpot > 0”为真,但实际上,availableSpot 可能不足以满足所有请求。这该如何处理呢?

concurrency mongodb mongodb-java

5
推荐指数
2
解决办法
9529
查看次数

从 InputStream 获取 Publisher<ByteBuffer>

我刚刚升级了 mongo-db-java-driver,现在方便的功能GridFSBucket.uploadFromStream已经消失了。因此我们现在得到了一个

GridFSUploadPublisher<ObjectId> uploadFromPublisher(String filename, Publisher<ByteBuffer> source);
Run Code Online (Sandbox Code Playgroud)

有什么想法如何将我的 InputStream 转换为 吗Publisher<ByteBuffer>?java驱动程序或Reactor中有任何实用函数吗?

java bytebuffer publisher reactor mongodb-java

5
推荐指数
1
解决办法
1710
查看次数

当负载增加时,Mongodb 似乎正在调用 secondary

我们有一个 mongo db 副本集配置,其中有 1 个主数据库和 2 个辅助数据库。我们已将读取首选项设置为,primary因为我们的辅助节点之一位于远程区域,并且不希望在该节点上进行读取操作。

如果我在调试模式下逐一运行 collection.find() 方法(该方法使用 MongoCursor 并迭代响应),我会看到所有调用都转到主函数。

上述可以通过2种方式验证:

  1. 客户端上的 mongo 驱动程序日志显示命令已发送到主 mongo 服务器
  2. 服务器上的mongodb.log打印find操作(启用slowms选项)

但是,如果我在没有调试模式(更高的速度+负载)的情况下运行相同的操作,则两台服务器的 mongodb.log 都会开始显示查找操作。这是出乎意料的,因为我们希望调用仅转到主数据库而不是远程辅助数据库。此外,客户端上的 mongo 驱动程序日志显示命令仅发送到主 mongo 服务器。

此外,主 mongodb.log 和辅助 mongodb.log 的区别在于,辅助 mongodb.log 中的 readPreference 显示为“secondaryPreferred”(并且我们不在代码中的任何位置设置此首选项)。

在辅助 mongodb.log 中看到日志的原因可能是什么?

是否只是打印日志并且调用真的会转到主要?或者主服务器确实将调用转发到具有 secondaryPreferred 读取首选项的辅助服务器?

mongodb mongodb-java mongodb-query

5
推荐指数
0
解决办法
252
查看次数