首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何插入包含列表的mongo (或spring-mongo)文档

如何插入包含列表的mongo (或spring-mongo)文档
EN

Stack Overflow用户
提问于 2015-04-20 21:07:08
回答 3查看 771关注 0票数 0

我正在尝试确定是否有一种方法可以使用spring-mongodb (或者甚至使用mongo java API)来插入一个包含列表的文档,使得列表中的元素始终是插入的值的联合。

假设我有以下类(用来简化程序):

代码语言:javascript
复制
public class Patron {
   private String name;
   private String address;
   private List<Book> booksRead;
 // assume gets/sets
}

public class Book{
   private String title;
   private String author;
// assume gets/sets
}

此外,假设我只获得了最近阅读的图书的更新,但我希望在数据库中保留所有已读图书的完整列表。所以我想做的是插入一个赞助人(与booksRead),如果它不存在或更新他们的booksRead,如果该赞助人已经存在。

因此,第一个upsert 'John Doe‘不在集合中,所以文档被插入,如下所示:

代码语言:javascript
复制
"_id": ObjectId("553450062ef7b63435ec1f57"),
"name" : "John Doe"
"address" : "123 Oak st, Anytown, NY, 13760"
"booksRead" : [
       {
          "title" : "Grapes of Wrath",
          "author" : "John Steinbeck"
       },
       {
          "title" : "Creatures Great and Small",
          "author" : "James Herriot"
       }
 ]

约翰重读了“愤怒的葡萄”,也读了“人鼠情缘”。尝试插入两本书作为图书已读,但我只想在已读列表中插入“Of Mice and Men”,这样文档看起来就像:

代码语言:javascript
复制
"_id": ObjectId("553450062ef7b63435ec1f57"),
"name" : "John Doe"
"address" : "123 Oak st, Anytown, NY, 13760"
"booksRead" : [
       {
          "title" : "Grapes of Wrath",
          "author" : "John Steinbeck"
       },
       {
          "title" : "Creatures Great and Small",
          "author" : "James Herriot"
       },
       {
          "title" : "Of Mice and Men",
          "author" : "John Steinbeck"
       }
 ]

我尝试过的所有调用似乎都需要分开调用,一个用于插入,另一个用于更新。Update.set适用于初始加载(插入),但在第二次更新时替换完整列表。$addToSet在更新时工作,但抱怨在初始插入时尝试插入到“非数组”中。

更新:

这似乎是Spring-mongodb的一个问题。我可以通过mongo java api调用来实现上述功能,但在使用spring等效项时会失败。(至少到spring-data-mongodb 1.6.2)

EN

回答 3

Stack Overflow用户

发布于 2015-04-20 21:17:12

最简单的方法是删除旧条目,然后用添加的书籍重新添加它。理想情况下,这应该以事务方式完成。

票数 0
EN

Stack Overflow用户

发布于 2015-04-20 21:21:05

我认为您可以使用addToSet运算符来完成此操作。您可以在MongoDB的网站上找到文档:http://docs.mongodb.org/manual/reference/operator/update/addToSet/#up._S_addToSet

它与update()或findAndModify()方法一起使用。

票数 0
EN

Stack Overflow用户

发布于 2015-04-20 22:33:33

问题似乎出在Spring layer。虽然我在使用FindAndModify命令插入时遇到了错误,但使用$addToSet的mongo DBCollection.findAndModify和DBCollection.update方法并没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29748764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档