标签: spring-data-mongodb

如何在Spring Data MongoDB中实现聚合查询?

我是 Spring Data MongoDB 的新手,我正在尝试使用 Spring Data MongoDB 在 Java 中实现聚合查询。我尝试从这个问题中进行搜索并使用 来解决它MongoTemplate,但仍然没有结果。

我的数据格式:

[{ 
    "_id" : ObjectId("5e1aea6c275360baf96bac29"), 
    "title" : "postim", 
    "upvotesBy" : [
        "5e18b4c12753608718dfa007", 
        "5e19ac0f5161a4994ded1f35"
    ], 
    "file" : "test", 
    "description" : "description", 
    "postedBy" : "5e18b4c12753608718dfa007", 
    "createdAt" : ISODate("2020-01-12T09:44:12.119+0000"), 
    "_class" : "com.socialnetwork.post.Post"
},
{ 
    "_id" : ObjectId("5e1aeaf8275360bb4bb47325"), 
    "title" : "postim2", 
    "upvotesBy" : [
        "5e18b4c12753608718dfa007", 
        "5e19ac0f5161a4994ded1f35"
    ], 
    "file" : "test2", 
    "description" : "description2", 
    "postedBy" : "5e18b4c12753608718dfa007", 
    "createdAt" : ISODate("2020-01-12T09:46:32.909+0000"), 
    "_class" : "com.socialnetwork.post.Post"
}]
Run Code Online (Sandbox Code Playgroud)

我的查询:

db.post.aggregate([
    {
      $match: {}
    },
    { …
Run Code Online (Sandbox Code Playgroud)

java rest spring mongodb spring-data-mongodb

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

当 MongoTemplate 保存数据时,MongoDB 截断 LocalDateTime 纳秒

我有一个使用 MongoDB 作为数据库的 Spring Boot 2 项目。

当我通过调用 LocalDateTime.now() 将包含日期的对象实例化为 LocalDateTime 时;我收到一个包含纳秒且超过 4 位数字的日期时间。

当我使用 mongotemplate.save 将这些数据保存在 mongoDB 中时,保存的值仅包含纳秒的 3 个位置(其余部分用零填充)。那么,如何在存储到数据库时达到相同的精度呢?或者另一种选择:在java中创建LocalDateTime实例时如何限制精度?

@Document("Entity")
public class Entity implements Serializable {

    @Id
    private String id;

    @Indexed(name = "created")
    private LocalDateTime created;

    public HistoryEntity(){
        // This gives me 2020-01-30T13:25:09.817182
        this.created = LocalDateTime.now();
    }
}
Run Code Online (Sandbox Code Playgroud)

@Repository
public class DAO {

    @Autowired
    private MongoTemplate mongoTemplate;


    public void save(Entity e) {
        // When value is persisted, I get 2020-01-30T13:25:09.817 if I look into mongoDB instance or if …
Run Code Online (Sandbox Code Playgroud)

java mongodb spring-data-mongodb spring-boot

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

在 Spring 中从 MongoDB 中删除索引

我正在尝试从之前放置的数据库中删除索引。

@Indexed(unique = true)
private String name;
Run Code Online (Sandbox Code Playgroud)

删除 后@Indexed(unique = true),我也需要将其从 中删除MongoDB。我需要在春季内完成。@PostConstruct我可以用什么东西来做吗?

spring mongodb spring-data-mongodb spring-boot

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

Spring Data 中的 MongoDB $addField 和 $indexOfArray

我正在尝试根据 Asya Kamsky 的帖子使用 MongoDB 和 Spring Data 实现自定义排序:

List<AggregationOperation> operations = new ArrayList<>();

operations.add(Aggregation.addFields().addField("scorrrz")
        .withValueOfExpression("{ \"$indexOfArray\" : [ [\"John\", \"Bill\"], \"$name\" ] }").build());
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此操作时,我得到:

ERROR a.insurance.misc.ErrorAttributes - /api/v1/insurance/opportunity/all
org.springframework.expression.spel.SpelParseException: Expression [{ "$indexOfArray" : [ ["John", "Bill"], "$name" ] }] @29: EL1043E: Unexpected token. Expected 'rsquare(])' but was 'comma(,)'
Run Code Online (Sandbox Code Playgroud)

这不是正确的语法吗?如何使用 Spring Data 来完成此操作?

mongodb spring-data aggregation-framework spring-data-mongodb

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

Java - 使用 MongoDB 集合批量写入插入/更新

我对 MongoDB 很陌生。尝试了解在 MongoDB 中执行批量写入的最佳选项。我想定期刷新我的应用程序集合。文档的键是 AppID、AppName 和 AppStatus。以下是我想在每次运行中执行的操作 -

  1. 在应用程序集合中找到AppID。
  2. 如果不存在则执行插入
  3. 如果存在,则仅更新 AppStatus 键的值。
List<Application> applist = getAppList(); // List contains All the Application

private final MongoClient mongoClient;

private final MongoTemplate mongoTemplate;

MongoCollection<Document> collection =
                  mongoTemplate.getDb().getCollection("Application");
collection.bulkWrite (????);
Run Code Online (Sandbox Code Playgroud)

如何循环 appList 并执行批量插入/更新?

mongodb mongo-java spring-data-mongodb mongo-java-driver

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

如何在spring data mongodb存储库中使用limit和skip?

我想使用 Spring Data MongoDB 查询 mongo 集合中的子列表。我的代码就像

public interface SomeRepo extends MongoRepository<SomeDoc, String> {
    @Query("{'field0': ?0, 'field1': ?1}, {'limit':?2, 'skip':?3}")
    List<SomeDoc> findAllByField0AndFiled1(
        Long field0,
        Long field1,
        Long limit,
        Long skip
    );
}
Run Code Online (Sandbox Code Playgroud)

limit&skip不在查询对象中

日志是 Created query Document{{field0=123, field1=456}} for Document{{}} fields.

如何将它们传递到查询对象中?

spring mongodb spring-data spring-data-mongodb

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

无法生成querydsl Q类

我相信这个问题已在这里问了一段时间,但没有任何公认的答复.我实际上尝试了各种教程,但没有得到它们.我有一个multi modules maven项目.我有dependency-managementplugin-management在父项目中.poms如下所示:

<!--parent ${querydsl.version} = 2.3.2-->
 <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <!--                        <fork>true</fork>
                    -->                        
                    <meminitial>128m</meminitial>
                    <maxmem>512m</maxmem>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>maven-apt-plugin</artifactId>
            <version>1.0</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<dependencyManagment>
    <dependencies>
     <!-- Querydsl -->
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-core</artifactId>
            <version>${querydsl.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>${querydsl.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-mongodb</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
        <!-- End Querydsl -->
    </dependencies>
</dependencyManagment>
Run Code Online (Sandbox Code Playgroud)

我在db mobule中都有jpa和mongo,两者都在不同的包中.但我只想 …

mongodb maven-plugin querydsl spring-data spring-data-mongodb

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

是否可以使用最新的mongo驱动程序与spring mongodb

Spring MongoDb仍然坚持使用mongo客户端的2.10版本.
是否可以使用更新版本的mongo驱动程序与spring mongodb或会破坏什么?

mongodb-java spring-data-mongodb

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

spring data mongodb"id"字段映射

我有一个带有数组字段的文档

"chapters": [
  { "id" : "14031871223912313", ...}
  ...
  ]
Run Code Online (Sandbox Code Playgroud)

我想使用以下命令查询使用Spring Data的MongoTemplate返回id:

class Chapter {
 private String id;
 public String getId() {
        return id;
    } 
}
Run Code Online (Sandbox Code Playgroud)

这样就不会填充id.我尝试使用@Field中描述的不同映射选项http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mapping.conventions.id-field

我究竟做错了什么?我知道我总是可以回到mongo java驱动程序,但我认为这应该工作.

在此先感谢您的帮助.

mongodb mongodb-java spring-data-mongodb

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

查询Spring Data MongoDB中嵌入式文档的数组

我有一个简单的问题:

我如何表达这个查询

db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
Run Code Online (Sandbox Code Playgroud)

查询嵌套在数组中的文档

在春季数据mongoDB中,最好使用QueryDSL,但也欢迎其他方式。

到目前为止,我所有的查询都匹配数组中任何嵌入式文档上的字段,但是我需要在同一字段上将两者都匹配。

spring-data-mongodb

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