标签: spring-mongo

如何使用Springs MongoTemplate和Criteria类检索字段子集

我希望能够执行以下控制台命令来返回所有行,只使用填充的字段子集但使用Spring的MongoTemplate类:

控制台命令

db.person.find(null,{name:1})

MongoTemplate

mongoTemplate.find(new Query(...), Person.class)

如果您对http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields感兴趣,可以在此处找到有关子集查询的信息

有任何想法吗?

干杯

spring mongodb spring-mongo

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

Spring mongodb获取保存后插入项目的ID

我正在使用Spring MongoDb.

我使用insert方法创建各种实体:http: //docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#insert-java.lang.Object -

但是,所有方法都返回void.我需要返回ObjectId插入的文档.

获得它的最佳方法是什么?

mongodb spring-mongo

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

MongoDB比较运算符为null

在MongoDB中,我想使用$ gt和$ lt比较运算符,其值可以为null.当运算符不使用null时,我查找了文档,但没有找到.在这两种情况下,它都没有返回任何文档(即使$ ne,$ gte和$ lte确实返回了文档;这意味着有些文档都等于且不等于null).

我希望$ gt基本上像$ ne一样运行(因为null类型的Mongo comarison命令是如此之低)和$ lt因为同样的原因没有返回任何内容.

我希望这可以工作,因为我传递给查询的值是变量(可能为null),我不想为null编写特殊情况.

鉴于以下集合,我正在考虑的示例:

{
  id: 1,
  colNum: null
}
{
  id: 2,
  colNum: 72
}
{
  id: 3
}
Run Code Online (Sandbox Code Playgroud)

我希望以下查询:

db.testtable.find( { "colNum" { $gt : null } } )
Run Code Online (Sandbox Code Playgroud)

回来:

{
  id: 2,
  colNum: 72
}
Run Code Online (Sandbox Code Playgroud)

但是,没有返回任何内容.

是否有一个原因,$ gt和$ lt似乎无法使用null,或者它是MongoDB错误,还是它实际上应该工作并且可能存在用户错误?

null spring mongodb spring-mongo

10
推荐指数
1
解决办法
2735
查看次数

Spring引导2.0.5.RELEASE和mongo 4.0连接问题

我在Spring网站上关注使用MongoDB访问数据教程
我安装了Mongo DB服务器版本4作为服务
当我使用客户端连接到它时,它的身份验证工作正常.

我正面临以下问题:

MongoCommandException: Command failed with error 18: 'Authentication failed'
Run Code Online (Sandbox Code Playgroud)

我看到代码使用的mongodb-driver-core-3.6.4.jar与服务器版本4不兼容

如何在不搞乱项目的情况下升级驱动程序?
他们为什么使用spring-boot-starter-data-mongodb而不是mongodb-driver-sync?

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='petUser', source='pets', password=<hidden>, mechanismProperties={}}
    at com.mongodb.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:162) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:39) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:68) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:168) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:122) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:52) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongodb-driver-core-3.6.4.jar:na]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_181]
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server localhost:27014. The full response is …
Run Code Online (Sandbox Code Playgroud)

java mongodb spring-mongo spring-boot

10
推荐指数
1
解决办法
4677
查看次数

Spring Mongo DB @DBREF

这是我的MongoDb结构,

db.user.find();
Run Code Online (Sandbox Code Playgroud)

用户:

{
"name" : "KSK", 
 "claim"  : [objectId("52ffc4a5d85242602e000000"),objectId("52ffc4a5d85242602e000001")] 
}
Run Code Online (Sandbox Code Playgroud)

要求:

[
   {
     "_id" : "52ffc4a5d85242602e000001",
     "claimName" :"XXXX"
   },
   {
     "_id" : "52ffc4a5d85242602e000000",
     "claimName" :"YYY"
   }
]
Run Code Online (Sandbox Code Playgroud)

我的实体类是:

@Document(collection="user")
public  class User{
  @Id      
  private String id;
  private String name; 
  @DBRef
private List<Claim> claim; 
// setter and getter 

}
Run Code Online (Sandbox Code Playgroud)

索赔等级:

@Document(collection="Claim")
public class Claim{
   @Id 
   private String id; 
   private String claimName;   
}
Run Code Online (Sandbox Code Playgroud)

我有一个方法来获取用户名,如下所示,

public User findByName(String name);
Run Code Online (Sandbox Code Playgroud)

如果我试图点击这个方法我得到一个错误,

没有找到能够从类型org.bson.types.ObjectId转换为类型java.lang.String的转换器

所以我改变了我的User实体类,如下所示,

而不是 private List<Claim> claim;

改为Private List<ObjectId> claim; …

java mongodb spring-mongo spring-mongodb

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

Spring Mongo DB @DBRef(lazy=true) - 如何延迟加载

我有一个像下面这样的模型(假设为伪代码)

class Student {

   @Id
   private String id;
   private String firstname;
   .....;

   @DBRef(lazy=true)
   private College college     

   // getters and setters

}

class College {

  @Id
  private String id;
  private String name;
  // other attributes.
  // getters and setters

}
Run Code Online (Sandbox Code Playgroud)

我正在使用 @DBRef(lazy=true) 以便我不会加载与学生关联的大学。例如:如果我有一个名为 findByFirstname(String firstname) 的 Student 存储库方法,我可以在没有大学的情况下加载学生。但是,有时 我也想为学生加载大学。是否可以使用@Query 注释(org.springframework.data.mongodb.core.query.Query)编写带有自定义查询的存储库方法,我可以在其中加载学生(所有字段)以及相关的大学实例?

@Query( what should go here ?) 
Student findStudentWithCollege(String firstname)
Run Code Online (Sandbox Code Playgroud)

如果不是,那么按需加载惰性文档的建议方法是什么?

根据文档

" DBRefs 也可以延迟解析。在这种情况下,实际对象或引用集合在第一次访问属性时解析。使用 @DBRef 的惰性属性来指定这一点。必需的属性也定义为延迟加载 DBRef 并使用因为构造函数参数也用延迟加载代理装饰,确保尽可能少地对数据库和网络施加压力。 ”我想这可能不适合加载姓氏为“史密斯”的学生的情况。 "以及检索到的每个学生的大学实例。

spring-data spring-mongo spring-data-mongodb spring-mongodb

9
推荐指数
0
解决办法
2559
查看次数

Spring -Mongodb存储/检索枚举为int而不是字符串

我的枚举在mongodb中存储为int(来自C#app).现在在Java中,当我尝试检索它们时,它会抛出异常(似乎枚举只能从字符串值转换).有什么办法可以吗?

此外,当我将一些集合保存到mongodb(来自Java)时,它会将枚举值转换为字符串(而不是它们的值/基数).有没有可用的覆盖?

这可以通过在类级别编写mongodb-converter来实现,但我不想为每个类编写mondodb-converter,因为这些枚举在许多不同的类中.

那么我们在战场上有什么东西吗?

spring mongodb spring-mongo

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

MongoFactoryBean和SimpleMongoDbFactory之间的区别

我正在设置MongoDB Spring MVC应用程序并尝试使用Service,DAO模式.

我在这里阅读了Spring-Data-MongoDB引用,但我不明白MongoFactoryBean和SimpleMongoDbFactory之间的区别是什么.

创建MongoTemplate bean的更好方法和原因是什么.

@Configuration
public class SpringMongoConfig {
    public @Bean
    MongoDbFactory mongoDbFactory() throws Exception {
       return new SimpleMongoDbFactory(new MongoClient(), "yourdb");
    }

    public @Bean
    MongoTemplate mongoTemplate() throws Exception {
       MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
       return mongoTemplate;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么.

@Bean
public MongoFactoryBean mongo() {
    MongoFactoryBean mongo = new MongoFactoryBean();
    mongo.setHost(env.getProperty("db.host"));
    mongo.setPort(env.getProperty("db.port",Integer.class,27017));
    return mongo;
}

@Bean
public MongoTemplate mongoTemplate() throws Exception{
    return new MongoTemplate(mongo().getObject(),env.getProperty("db.name"));
}
Run Code Online (Sandbox Code Playgroud)

我何时使用MongoFactoryBean?何时使用MongoDbFactory?他们有不同的用例吗?

此外,将MongoDB引导到Spring MVC的最佳方式是,它具有高度可扩展性和可配置性,并且还提供插入任何其他RDBMS(相同或不同功能)的规定.(对于各种数据库类型,可能有两种不同的DAO impls?)

java mongodb spring-mongo

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

如何在mongodb存储库中使用@query添加orderby

我想在spring with mongodb中使用spring将orderby添加到以下存储库方法中.我试过各种方法,但没有用

public interface StageRepository extends MongoRepository<Stage, String> {

     @Query("{$and: [ { 'categoryId': { $eq: ?0 } }, { 'isDeleted': { $eq: ?1 } } ]}")
     public List<Stage> findByCategoryIdAndIsNotDeleted(String categoryId, Boolean deleted);

}
Run Code Online (Sandbox Code Playgroud)

我想在查询中添加orderby'order'.

不知道怎么做.

spring mongodb spring-mongo

7
推荐指数
1
解决办法
2686
查看次数

如何将来自不同数组的两个匹配对象合并为一个对象?

我有一种情况,我从聚合中得到一个结果,我以这种格式获取数据。

{
    "_id" : ObjectId("5a42432d69cbfed9a410e8ad"),
    "bacId" : "BAC0023444",
    "cardId" : "2",
    "defaultCardOrder" : "2",
    "alias" : "Finance",
    "label" : "Finance",
    "for" : "",
    "cardTooltip" : {
        "enable" : true,
        "text" : ""
    },
    "dataBlocks" : [
        {
            "defaultBlockOrder" : "1",
            "blockId" : "1",
            "data" : "0"
        },
        {
            "defaultBlockOrder" : "2",
            "blockId" : "2",
            "data" : "0"
        },
        {
            "defaultBlockOrder" : "3",
            "blockId" : "3",
            "data" : "0"
        }
    ],
    "templateBlocks" : [
        {
            "blockId" : "1",
            "label" : "Gross …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-mongo aggregation-framework spring-mongodb

7
推荐指数
2
解决办法
4543
查看次数