在 Morphia 中,我如何更新 ArrayList 中的一个嵌入对象
使用 Mongodb 与 Morphia 确实很陌生,并且看到了许多如何执行此操作的高级答案。
如果可能的话,我想做得简单,并且我有一个名为 @Embedded
的对象fileObjects
包含 Files
对象。
我无法更新文件
内的字段。
我只想更新一个字段,例如 String fileHash
。
@Entity
public class BatchData {
@Id private ObjectId id;
@Embedded
public ArrayList<Files> fileObjects = new ArrayList<Files>();
}
更新.. 阅读 Morphia Updating 上的 wiki 并没有“真正”只说明如何执行此操作当数组包含这样的 Integer
时:
@Embedded
List<Integer> roomNumbers = new ArrayList<Integer>();
这是我到目前为止所尝试的:
mongo.createUpdateOperations(BatchData.class).add("fileObjects", Files, false);
此代码插入的 Files
已经在 mongo 中。 false
不会检测到这一点并将其插入到数组的末尾。我可以向 Files
添加一个唯一 ID,以便检测到正在插入的 Files
存在于数组中,然后更新它吗?
@Embedded
public class Files
{
public Files() {
}
public int position;
public String fileName = "";
public String fileHash = "";
public Files(int pos, String fileName, String fileHash) {
this.position = pos;
this.fileName = fileName;
this.fileHash = fileHash;
}
}
阅读其他答案,例如 morphia-mongodb-accessing 但是他已经有了
@Entity BlogEntry(参见链接)位于 mongo 外部的 POJO 中。也许我也必须这样做?
拉出来,改一下,再保存回来?
Really new to Using Mongodb with Morphia and see many advanced answers how to do this.
I want to do it simple if it's possible and I have this @Embedded
Object calledfileObjects
that contains Files
Objects.
I Cannot update the fields inside the Files
.
I want to update only one field f.ex the String fileHash
.
@Entity
public class BatchData {
@Id private ObjectId id;
@Embedded
public ArrayList<Files> fileObjects = new ArrayList<Files>();
}
UPDATE..
Reading the wiki at Morphia Updating dont "really" say how to do this only when the array contains Integer
like this:
@Embedded
List<Integer> roomNumbers = new ArrayList<Integer>();
Here is what i try so far:
mongo.createUpdateOperations(BatchData.class).add("fileObjects", Files, false);
The Files
that this code insert is already in the mongo. The false
don't detect that and insert it at the end of the array. Can i add an unique-id to the Files
so it detect that the Files
am inserting exist in the array, and then just update it?
@Embedded
public class Files
{
public Files() {
}
public int position;
public String fileName = "";
public String fileHash = "";
public Files(int pos, String fileName, String fileHash) {
this.position = pos;
this.fileName = fileName;
this.fileHash = fileHash;
}
}
Reading other answers like morphia-mongodb-accessing but he already have the
@Entity BlogEntry(see link) in a POJO outside of mongo. Maybe i have to do the same?
Pull it out, change it and save it back?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为了让任何人高兴而回答我自己的问题。
我想我不确定是否解决了它。
当
fileObjects
有许多文件
时,它看起来正在进行测试。正确的
fileHash
确实已更新。Answering my own question for anyone's delight.
I think i solved it not sure.
It looks like it's working im testing when the
fileObjects
have manyFiles
.The right
fileHash
is updated indeed.就我而言,我能够使用removeAll方法:
这假设MyType具有字段List myEmbeddedList;并且有一个值“thevalue”要从列表中删除。
In my case I was able to use the removeAll method:
This assume that MyType has the field List myEmbeddedList; and that there is a vlue "thevalue" to be removed from the list.
我刚刚(是的,现在)以这种方式解决了这个问题:
我通过查询获取根类
然后,我在这个根类中实现了 CRUD 操作(我将发布我的根类):
一次,我修改了我的应用程序数据,我只是将其保存到主程序中的 mongodb 中:
希望这可以帮助你,再见!
I just (yeah, right now) solved this problem, in this way:
I get the root class with a query
Then, I have implemented the CRUD operations inside this root class (I'll post my root class):
Once, I modified my Application data I just save it to mongodb in the main program with:
Hope this can help you, bye!