如何在MongoDB的数组字段中查询和删除嵌入式对象?

杰克1986

我试图运行一个更新命令,该命令在所有文档的数组字段中找到一个对象,然后从所有文档的数组字段中拉出对象。我尝试了以下命令,这些命令不返回任何文档(nMatched:0)。

db.users.update({"likedQuizzes.quiz": { $elemMatch: quizObj}},{$pull: {"likedQuizzes.quiz": quizObj }});
db.users.update({"likedQuizzes": { $elemMatch: quizObj}},{$pull: {"likedQuizzes": quizObj }});

在上述情况下 quizObj = {"title" : "2 Purple", "author" : "purple-tester1"}

这是来自“用户”集合的样本文档:

{

"_id" : ObjectId("581114330de9ac0c1445cdd6"),
"user" : "test-username1",  
"likedQuizzes" : [
        {
            "quiz" : {
                "title" : "2 Purple",
                "author" : "purple-tester1"
            },
            "date" : ISODate("2016-10-26T20:39:02.695Z")
        },
        {
            "quiz" : {
                "title" : "1 Purple",
                "author" : "purple-tester1"
            },
            "date" : ISODate("2016-10-26T20:39:12.374Z")
        },
        {
            "quiz" : {
                "title" : "4 Green",
                "author" : "green-tester1"
            },
            "date" : ISODate("2016-10-26T20:39:25.304Z")
        },
        {
            "quiz" : {
                "title" : "3 Green",
                "author" : "green-tester1"
            },
            "date" : ISODate("2016-10-26T20:39:37.326Z")
        },
        {
            "quiz" : {
                "title" : "2 Green",
                "author" : "green-tester1"
            },
            "date" : ISODate("2016-10-26T20:40:12.964Z")
        }
    ]
}

换句话说,我只是尝试查找测验是否位于用户的“ likedQuizzes”数组中,如果是,则将其从该数组中删除(以及喜欢的“日期”)。

经过一番研究后,看来这不可能实现,但是我还是想问一下,因为我认为我的模式可能与研究中的示例有所不同。在此先感谢您提供任何指导。

杜伯格

您可以将文档重组为以下结构:

{
    "_id" : ObjectId("581114330de9ac0c1445cdd6"),
    "user" : "test-username1",
    "likedQuizzes" : [
        {
            "title" : "2 Purple",
            "author" : "purple-tester1",
            "date" : ISODate("2016-10-26T20:39:02.695Z")
        },
        {
            "title" : "1 Purple",
            "author" : "purple-tester1",
            "date" : ISODate("2016-10-26T20:39:12.374Z")
        },
        {
            "title" : "4 Green",
            "author" : "green-tester1",
            "date" : ISODate("2016-10-26T20:39:25.304Z")
        },
        {
            "title" : "3 Green",
            "author" : "green-tester1",
            "date" : ISODate("2016-10-26T20:39:37.326Z")
        },
        {
            "title" : "2 Green",
            "author" : "green-tester1",
            "date" : ISODate("2016-10-26T20:40:12.964Z")
        }
    ]
}

之后...如果您运行以下命令:

db.users.update(
    {
        "likedQuizzes": { 
            $elemMatch: {
                "title" : "2 Purple", 
                "author" : "purple-tester1"
            }
        }
    },
    {
        $pull: { 
            "likedQuizzes": { 
                "title": "2 Purple",
                "author": "purple-tester1"
            }
        }
    }
);

您的$ pull现在可以使用了。$ pull与$ elemMatch的搭配似乎不太好

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对MongoDB中的嵌入式对象进行排序

如何在Go中读取嵌入式字段?

如何使用Open XML SDK删除Word和PowerPoint中的所有嵌入式对象?

如何从Mongoose模式的嵌入式对象中删除_id?

基于范围查询MongoDB中嵌入式文档的数组

从嵌入式文档中删除字段

如何在数组中的嵌入式文档中指定/投影字段?

如何在mongodb中搜索嵌入式文档?

查询Spring Data MongoDB中嵌入式文档的数组

在mongoDb中对嵌入式文档数组(3个级别)进行过滤查询

从mongodb集合中的嵌入式数组对象仅获取特定字段

在数组mongodb中查找嵌入式对象

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

如何在MongoDB中的嵌入式数组对象中插入json对象?

如何在嵌入式数组mongodb中查询嵌入式文档

使用Presto查询MongoDB嵌入式/嵌套文档的数组

如何在MongoDB中的嵌入式文档中获得同一级别的所有字段

查询MongoDB中的嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

如何在Rails和Mongoid中查询嵌入式文档

使用Underscore删除使用嵌入式数组的对象

php:将mongodb嵌入式文档查询到数组中

如何在MongoDB中查询数组中的单个嵌入式文档?

与数组比较,如何在mongodb中检索部分嵌入式文档?

如何查询Mongodb的嵌入式数组

Mongodb:将字段添加到嵌入式文档中(无数组)

MongoDB 复杂聚合查询以求和嵌入式数组中的元素,有限制

如何在 MongoDb 中查询嵌入式文档?

在 MongoDB 中构建搜索查询时嵌入式字段和 dbRef 字段之间的区别