如何检索和删除嵌入的文档源数据MongoDB

How to retrieve and remove embedded document spring data mongodb(如何检索和删除嵌入的文档源数据MongoDB)

本文介绍了如何检索和删除嵌入的文档源数据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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何检索和删除嵌入的文档源数据MongoDB

基础教程推荐