我希望能够执行以下控制台命令来返回所有行,只使用填充的字段子集但使用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.
我使用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中,我想使用$ 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错误,还是它实际上应该工作并且可能存在用户错误?
我在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) 这是我的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; …
我有一个像下面这样的模型(假设为伪代码)
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 并使用因为构造函数参数也用延迟加载代理装饰,确保尽可能少地对数据库和网络施加压力。 ”我想这可能不适合加载姓氏为“史密斯”的学生的情况。 "以及检索到的每个学生的大学实例。
我的枚举在mongodb中存储为int(来自C#app).现在在Java中,当我尝试检索它们时,它会抛出异常(似乎枚举只能从字符串值转换).有什么办法可以吗?
此外,当我将一些集合保存到mongodb(来自Java)时,它会将枚举值转换为字符串(而不是它们的值/基数).有没有可用的覆盖?
这可以通过在类级别编写mongodb-converter来实现,但我不想为每个类编写mondodb-converter,因为这些枚举在许多不同的类中.
那么我们在战场上有什么东西吗?
我正在设置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?)
我想在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'.
不知道怎么做.
我有一种情况,我从聚合中得到一个结果,我以这种格式获取数据。
{
"_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)