【问题标题】:Capped Array in Spring Data MongoDBSpring Data MongoDB 中的封顶数组
【发布时间】:2015-05-08 16:25:16
【问题描述】:

我是 Spring Data MongoDB 的新手,想知道您是否可以帮助我。基本上,我想要实现的是限制文档中嵌入数组的大小。我看过其他帖子,但它没有使用spring数据mongodb( Saving with Java springdata a mongoDB document with capped array ($slice and $sort), MongoDB 2.4's "Limit Number of Elements in an Array after an Update" using C# driver?)。

Sample Document:
{

  _id: 1,
  scores: [
     { attempt: 1, score: 10 },
     { attempt: 2 , score:8 }
         ]
}

updateScore() { Query query = new Query(Criteria.where("id").is(id)); query.fields().slice("scores", -3); Update update = new Update(); update.push("scores", scores); mongoOperations.findAndModify(query, update, MyDocument.class); } 调用 updateScore 方法后,我可以看到添加了新的分数,并且它的大小超过了 3。

     <!-- mongodb java driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.13.0</version>
    </dependency>

    <!-- Spring data mongodb -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.5.4.RELEASE</version>
    </dependency>

希望听到您的cmets和建议。

【问题讨论】:

    标签: java mongodb spring-data-mongodb


    【解决方案1】:

    您可以将更新更改为以下内容:

    Query query = new Query(Criteria.where("id").is(id));
    query.fields().slice("scores", -3);
    Update update = new Update();
    update.push("scores", scores);
    update.push("scores", new BasicDBObject("$each", scores).append("$slice", -3));
    mongoOperations.findAndModify(query, update, MyDocument.class);
    

    $slicepush 尚不受 spring-data 支持 -> https://jira.spring.io/browse/DATAMONGO-832

    【讨论】:

      【解决方案2】:

      update.push("scores").slice(-3).each(scores)

      【讨论】:

      • 社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。另外,请阅读this 帮助页面,了解如何正确格式化代码。
      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2023-03-20
      • 2019-10-16
      • 2021-03-10
      相关资源
      最近更新 更多