我们的测试工具创建n个线程,并在每个线程内执行m次迭代。我们计算最小,平均和最大操作时间。因此,我们会不时看到mongo执行请求的速度非常慢-长达几秒钟。同样,每次首次操作最慢时,我们甚至有意将其从统计数据中排除,而avg和max之间的差异仍然很大。正常吗 我可以消除那些缓慢的操作吗?为什么mongo执行某些请求的速度如此之慢?
下面是我们同时运行插入/获取/删除/更新测试时的单操作模式和混合模式的结果。在混合模式下,thread = 1表示我们为每种测试类型创建了4个线程

我们使用默认值-每个主机100个连接
资源
public void storeMt(MyTestObject myTestObject) {
mongoTemplate.insert(myTestObject );
}
public MyTestObject getMt(long id) {
MyTestObject result = mongoTemplate.findById(id, MyTestObject.class);
return result;
}
@Document
public class MyTestObject implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
//class contains 20+ fields
.......
Run Code Online (Sandbox Code Playgroud) 我正在使用spring-boot-starter-data-mongodb构建一个简单的REST api,并且E11000 duplicate key error在尝试插入第二行时总是得到一个.
Spring的入门指南有一个非常简单的配置,我遵循,但我必须遗漏一些东西.
我已经删除了集合,并开始新鲜,第一个文档保存正常,但第二个文件也尝试保存为id = 0.如何让Spring/Mongo正确增加?
这是我得到的错误:
org.springframework.dao.DuplicateKeyException: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 , "err" : "E11000 duplicate key error index: test.game.$_id_ dup key: { : 0 }" , "code" : 11000}; nested exception is com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 , "err" : "E11000 duplicate key error index: test.game.$_id_ dup key: { : 0 }" , "code" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring Mongo 驱动程序来执行一个将运行一段时间的大型 mongo 聚合语句。此聚合的输出阶段将聚合的输出写入新的集合中。我永远不需要在内存中检索此聚合的结果。
当我在 Spring boot 中运行此程序时,JVM 在进行行检索时内存不足,尽管我没有使用或存储任何结果。
有没有办法使用 MongoTemplate.aggregate 跳过行检索?
前任:
mongoTemplate.aggregate(Aggregation.newAggregation(
Aggregation.sort(new Sort(new Sort.Order(Sort.Direction.DESC, "createdOn"))),
Aggregation.group("accountId")
.first("bal").as("bal")
.first("timestamp").as("effectiveTimestamp"),
Aggregation.project("_id", "effectiveTimestamp")
.andExpression("trunc(bal * 10000 + 0.5) / 100").as("bal"),
aggregationOperationContext -> new Document("$addFields", new Document("history",Arrays.asList(historyObj))),
// Write results out to a new collection - Do not store in memory
Aggregation.out("newBalance")
).withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build()),
"account", Object.class
);
Run Code Online (Sandbox Code Playgroud) 我在 MongoDB 中有这样的 JSON 文档
{
"os" : "Windows 10"
}
{
"os" : "WINDOWS 8"
}
{
"os" : "UBunTu 18.04"
}
Run Code Online (Sandbox Code Playgroud)
如何os使用 Spring MongoTemplate 不区分大小写并包含进行查询,以便我可以传递["windows", "ubuntu"] 并从数据库获取所有三个文档
我尝试过类似的方法但没有成功。
String osRegEx = String.join(" | ", new String[]{"windows", "ubuntu"});
query.addCriteria(Criteria.where("os").regex(osRegEx, "i"));
Run Code Online (Sandbox Code Playgroud) mongodb spring-mongo spring-data-mongodb spring-boot mongotemplate
我是 MongoDB 的新手。我以以下格式将数据存储在 mongoDB 中
"_id" : ObjectId("51d5725c7be2c20819ac8a22"),
"chrom" : "chr22",
"pos" : 17060409,
"information" : [
{
"name" : "Category",
"value" : "3"
},
{
"name" : "INDEL",
"value" : "INDEL"
},
{
"name" : "DP",
"value" : "31"
},
{
"name" : "FORMAT",
"value" : "GT:PL:GQ"
},
{
"name" : "PV4",
"value" : "1,0.21,0.00096,1"
}
],
"sampleID" : "Job1373964150558382243283"
Run Code Online (Sandbox Code Playgroud)
我想将值更新为 11,其名称为Category. 我试过下面的查询:
db.VariantEntries.update({$and:[ { "pos" : 117199533} , { "sampleID" : "Job1373964150558382243283"},{"information.name":"Category"}]},{$set:{'information.value':'11'}})
Run Code Online (Sandbox Code Playgroud)
但是 Mongo 回复了
can't …Run Code Online (Sandbox Code Playgroud) 我已添加 @Enableauditng 作为注释,但 @version 不会自行增加版本。我有@LastModifiedDate,它正在更新但不是@version。
我做错了什么。
我一次又一次地调用 mongoTemplate.save(object) 。
请指教
如何更改mongo连接池大小?
我看到默认是100。有没有办法改变这个值?
我不想通过 spring 来做,有没有办法通过 MongoClient 配置它?
我看到有一个关于 mongoClientOptions 的选项,但我没有看到设置连接池的选项
我定义了这个Bean:
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mongoConverter" />
</bean>
Run Code Online (Sandbox Code Playgroud)
并且我实例化了一个mongoOprations使用此Bean的对象,现在我想知道Spring mongoTemplate线程安全吗?
我在MongoDB集合中有一个像这样的文档:
{
id : ...
listA:[{
id: ...,
thing:...,
listB:[{...},{...}]
},...
]
}
Run Code Online (Sandbox Code Playgroud)
(顶级ID是正常自动生成的MongoDB ID。子文档对象的另一个ID是我分别生成并推送到列表中的伪ID)
问题:我想(1)添加到listB(2)更改thing
该对象可能非常笨重,并且可能有多个线程正在该对象上运行,因此我想避免先发生findOne,先更新后再save发生场景类型。
我想在Spring Data中以与推送到相似的方式进行操作listA,即
@Autowired
private MongoOperations operations;
public void addStuff(String id, Stuff stuff) {
operations.updateFirst(Query.query(Criteria.where("_id").is(id)),
new Update().addToSet("listA", stuff), Stuffs.class);
}
Run Code Online (Sandbox Code Playgroud)
但是,我在生成正确的查询/标准时遇到了麻烦。
提前致谢。
我data在 mongo db 中有名称的集合。
spring 模型中的文档声明如下所示:
@Document(collection = "data")
public class DataPoint {
@Id
private String id;
private Long counter;
...
}
Run Code Online (Sandbox Code Playgroud)
我想在数据点条目中找到最大计数器,或者至少找到最大值DataPoint。
我试着写:
@Repository
public interface DataPointRepository extends MongoRepository<DataPoint, String> {
DataPoint findFirstOrderByCounter();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在日志中看到:
org.springframework.data.repository.query.ParameterOutOfBoundsException: Invalid parameter index! You seem to have declare too little query method parameters!
at org.springframework.data.repository.query.Parameters.getParameter(Parameters.java:207)
at org.springframework.data.repository.query.Parameters.getBindableParameter(Parameters.java:277)
at org.springframework.data.repository.query.ParametersParameterAccessor.getBindableValue(ParametersParameterAccessor.java:125)
at org.springframework.data.repository.query.ParametersParameterAccessor$BindableParameterIterator.next(ParametersParameterAccessor.java:182)
at org.springframework.data.mongodb.repository.query.ConvertingParameterAccessor$ConvertingIterator.next(ConvertingParameterAccessor.java:186)
at org.springframework.data.mongodb.repository.query.MongoQueryCreator.from(MongoQueryCreator.java:247)
at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:116)
at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:60)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73)
at org.springframework.data.mongodb.repository.query.PartTreeMongoQuery.createQuery(PartTreeMongoQuery.java:85)
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:84) …Run Code Online (Sandbox Code Playgroud) spring-mongo ×10
java ×7
mongodb ×7
spring ×5
spring-data ×2
groovy ×1
mongo-java ×1
performance ×1
spring-boot ×1