java - 使用 MongoDB 删除新数组并将其添加到 JSON 对象中

标签 java json spring mongodb

我有 JSON 对象:

{ "_id" : "1", "_class" : "com.model.Test", "projectList" : [ { "projectID" : "Spring", "resourceIDList" : [ "Mark","David" ] }, { "projectID" : "MongoDB", "resourceIDList" : [ "Nosa ] }

我需要能够删除项目“Spring”的resourceIDList 并分配一个新的ResourceIDList。

ResourceIDList 只是列表

每当我尝试使用以下内容时,数据库中都不会更新任何内容:

 Query query = new Query(where("_id").is("1").and("projectID").is("Spring"));    

 mongoOperations.updateMulti( query,new Update().set("ressourceIDList",  populateResources()), Test.class);

最佳答案

替换嵌入文档中匹配 {"projectList.projectID":"Spring"} 的 ResourceIDList 可以在 JavaScript shell 中完成,如下所示: (我喜欢从 JS shell 开始,因为它比 Java 更简洁,而且语法相对简单。然后可以将 JS 示例应用于任何语言驱动程序。)

> db.collection.update({_id:"1", "projectList.projectID":"Spring"}, {$set:{"projectList.$.resourceIDList":["Something", "new"]}})

有关使用“$”运算符修改嵌入文档的文档可以在“更新”文档的“$ 位置运算符”部分中找到: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator 有关嵌入文档的更多信息,请参阅“点表示法(触及对象)”文档: http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

上面的操作可以在 Java 驱动程序中完成,如下所示:

Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("test");
DBCollection myColl = db.getCollection("collection");
ArrayList<String> newResourceIDList = new ArrayList<String>();
newResourceIDList.add("Something");
newResourceIDList.add("new");
BasicDBObject myQuery = new BasicDBObject("_id", "1");
myQuery.put("projectList.projectID", "Spring");
BasicDBObject myUpdate = new BasicDBObject("$set", new BasicDBObject("projectList.$.resourceIDList", newResourceIDList));
myColl.update(myQuery, myUpdate);
System.out.println(myColl.findOne().toString());

如果您有多个与 {"projectList.projectID": "Spring"} 匹配的文档,您可以使用 multi = true 选项立即更新它们。使用 Java 驱动程序,它看起来像这样:

myColl.update(myQuery, myUpdate, false, true);

上面的“false”代表“upsert = false”,“true”代表“multi = true”。 “更新”命令的文档对此进行了解释: http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29

不幸的是,我对Spring框架不熟悉,所以我无法告诉你如何使用“mongoOperations”类来做到这一点。希望上述内容能够加深您对如何在 Mongo 中更新嵌入式文档的理解,并且您将能够使用 Spring 完成您需要做的事情。

关于java - 使用 MongoDB 删除新数组并将其添加到 JSON 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113558/

相关文章:

java - 为什么在这个例子中没有调用子类方法,因为它在 Java 的动态多态中被调用?

读取 Json 后 iOS PickerView 为空

java - 在与 MySQL 的 JDBC 连接中,环境变量 OPENSHIFT_MYSQL_DB_HOST 不起作用

java - 如何将名称生成器添加到上下文 :component-scan in annotation form?

spring 在运行时导入模块在 bean 中被忽略

java - TeamCity - 将已发布的工件复制到网络位置

java - 如何在 JEditorPane 中显示 html 文件

java - RecyclerView 中的 null 对象引用上的 setLayoutManager

c# - 使用 C# API 进行 iOS 开发

Java相当于python的json.dumps