如何从数组中删除文档? [复制]
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 中的子文档数组中删除匹配条件的子文档