本文介紹了如何檢索和刪除嵌入的文檔源數據MongoDB的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我被卡住了,如何刪除MongoDB中的嵌入文檔。我使用的是Spring Data MongoDB標準,如下所示:
// database
"_id" : ObjectId("55683d51e4b0b6050c5b0db7"),
"_class" : "com.samepinch.domain.metadata.Metadata",
"preferenceType" : "SHOPPING",
"subtypes" : [
{
"_id" : ObjectId("55683d51e4b0b6050c5b0db6"),
"leftValue" : "VEG",
"rightValue" : "NON_VEG",
"preferencePoint" : 0
}
],
"createdDate" : ISODate("2015-05-29T10:20:01.610Z"),
"updatedDate" : ISODate("2015-05-29T10:20:01.610Z")
// query
mongoTemplate.updateMulti(new Query(),
new Update().pull("subtypes", Query.query(Criteria.where("subtypes._id").is(new objectId("55683d51e4b0b6050c5b0db6"))),Metadata.class);
我做錯了什么?
提前感謝!
推薦答案
subtypes
在嵌套對象中,因此您應該首先將其傳入$elemMatch是匹配給定條件的第一個匹配的數組元素。將查詢更新為:
db.updateMulti.update({"subtypes":{"$elemMatch":{"_id":ObjectId("55683d51e4b0b6050c5b0db6")}}},
{"$pull":{"subtypes":{"_id":ObjectId("55683d51e4b0b6050c5b0db6")}}})
此查詢從subtypes
數組中提取完全匹配的數組元素。
在這個spring elemMatch的幫助下(不太擅長Spring Mongo),我將這個查詢轉換為Spring格式,如下所示:
mongoTemplate.updateMulti(new Query(
where("subtypes").elemMatch(where("_id").is(ew objectId("55683d51e4b0b6050c5b0db6"))).pull(
pull("subtypes", Query.query(Criteria.where("_id").is(new objectId("55683d51e4b0b6050c5b0db6"))),Metadata.class
));
上述春季查詢未經測試,我希望您能將mongo更新查詢轉換為春季mongo查詢格式。
這篇關于如何檢索和刪除嵌入的文檔源數據MongoDB的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,