如何从数组中删除文档? [复制]

Posted

技术标签:

【中文标题】如何从数组中删除文档? [复制]【英文标题】:How can I remove a document from an array? [duplicate] 【发布时间】:2016-07-30 14:41:49 【问题描述】:

我已经插入了一个具有这种结构的文档

 
  "_id" : ObjectId("5708bf40a86e6f5bd1f45354"),
  "companyId" : ObjectId("5708bed6a86e6f5bd1f4534f"),
  "descriptions" : [ 
        "id" : ObjectId("5708bf40a86e6f5bd1f45351"), "description" : "test" ,
        "id" : ObjectId("5708bf40a86e6f5bd1f45352"), "description" : "test1" ,
        "id" : ObjectId("5708bf40a86e6f5bd1f45353"), "description" : "test2"  
   ]

现在我正在尝试通过删除与某些条件匹配的对象来修改数组 - 在这种情况下,我需要删除具有特定 id 的对象。

这是我到目前为止所做的,没有任何成功

public void deleteCustomField(final String descriptionId, final ObjectId companyId)
    MongoCollection<Document> collection = setCollection(CUSTOM_FIELDS_COLLECTION);

    collection.updateOne(and(eq("companyId", companyId), eq("descriptions.id", new ObjectId(descriptionId))), new Document("$unset", new Document("descriptions.description", "")));

这是setCollection 方法

private MongoCollection<Document> setCollection(final String collectionName)
    return db.getCollection(collectionName); 

updateOne 什么都不做。我知道我的查询看起来很奇怪,但我不明白发生了什么以及如何从数组中删除文档。我也试过$pull,但我一点运气都没有。

我知道我在这里遗漏了一些小而非常基本的东西,但作为 MongoDB 初学者,我无法发现它。

你能帮我推一下吗?

【问题讨论】:

【参考方案1】:

您可以尝试替换 new Document("$unset", new Document("descriptions.description", "")) 经过 new Document("$pull", new Document("descriptions.id", new ObjectId(descriptionId)))。 请参阅pull operator 的文档。

【讨论】:

感谢您的回答,在阅读了一些好的文档后,我设法让它工作了。 不客气。我的解决方案有效吗?如果您发现其他更适合您想要的东西,请将其添加为答案。

以上是关于如何从数组中删除文档? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从集合中删除文档? [复制]

如何从 Firestore 集合中获取所有文档并将它们返回到数组列表中? [复制]

如何从 Mongo DB 中的子文档数组中删除匹配条件的子文档

如何从 MongoDB 文档中的双重嵌套数组中删除元素。

如何从 Word 文档中复制富文本内容控件的内容并使用 Open XML SDK 删除控件本身

如何使用猫鼬复制字段数据并在同一文档的另一个字段中使用它?