从MongoDB中删除一个元素的数组?

10 浏览
0 Comments

从MongoDB中删除一个元素的数组?

我在MongoDB集合中存储了下面的文档,我将动态接收要删除的URL。例如,我需要删除名称为“name”:\"FNOL\",\"country\":\"US\",\"lob\":\"property\"的订阅者URL http://localhost.8080/FNOL/subscriber1。\n我该如何使用MongoDB编写删除命令?我需要重新定义我的文档结构吗?谢谢。\n{\n \"_id\" : ObjectId(\"5b07fbbc0d7a677d2f8b2d87\"),\n \"name\" : \"FNOL\",\n \"country\" : \"US\",\n \"lob\" : \"property\",\n \"subscribers\" : [\n {\n \"protocol\" : \"REST\",\n \"url\" : \"http://localhost.8080/FNOL/subscriber1\"\n },\n {\n \"protocol\" : \"SOAP\",\n \"url\" : \"http://localhost.8080/FNOL/subscriber2\"\n },\n {\n \"protocol\" : \"JMS\",\n \"url\" : \"NOTIFICATION.TOPIC.FNOL\"\n }\n ]\n}\n\n删除后:\n{\n \"_id\" : ObjectId(\"5b07fbbc0d7a677d2f8b2d87\"),\n \"name\" : \"FNOL\",\n \"country\" : \"US\",\n \"lob\" : \"property\",\n \"subscribers\" : [\n {\n \"protocol\" : \"SOAP\",\n \"url\" : \"http://localhost.8080/FNOL/subscriber2\"\n },\n {\n \"protocol\" : \"JMS\",\n \"url\" : \"NOTIFICATION.TOPIC.FNOL\"\n }\n ]\n }\n

0
0 Comments

问题的出现原因:用户想要从MongoDB中的数组中删除一个元素。

解决方法:可以使用$pull操作符来指定条件并将匹配的文档和url作为$pull的参数来删除元素。具体代码如下:

let urlToRemove = "http://localhost.8080/FNOL/subscriber1";
db.col.update(
    { name: "FNOL", country: "US", lob: "property" }, 
    { $pull: { subscribers: {url: urlToRemove }}})

这个方法在mongo shell中似乎是有效的。我会尝试使用camel mongo组件,并在这个问题上向您反馈。

0