MongoDB查询也用于子元素

时间:2017-02-03 22:04:50

标签: mongodb

我有这个系列:

[
{
    username : "User1",
    theme : [
        {
            name : "Theme1",
            posts : [
                {
                    text : "test1",
                    postdate : 1,
                    comments : [
                        {username: "User1"}
                    ]
                },
                {
                    text : "test2",
                    postdate : 2,
                    comments : [
                        {username: "User2"}
                    ]
                },
                {
                    text : "test3",
                    postdate : 3,
                    comments : [
                        {username: "User3"}
                    ]
                }
            ]
        }
    ],
},

我想检查文章“test1”的帖子“User1”是否有评论。到目前为止我已经尝试过这个,但它不起作用:

db.user.find({ "theme.posts.text" : "test1" , "theme.posts.comments.username" : "User1"});

编辑:

问题是,当我搜索“test1”时,我得到了一个结果,当我搜索“test2”时,我也得到了一个结果。但是当文本“test1”的帖子有“User1”的评论时,我只想要一个结果。所以我想检查一个带有文字X的帖子是否有人Y的评论。

什么是正确的解决方案?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是评论是一个数组。所以theme.posts.comments没有名为username的属性。而是theme.posts.comments [0]有一个名为username的属性。

一种解决方案是使用文本获取所有结果:“test1”然后在数组result.comments上使用javascript函数indexOf,并查看对象{userName:'User1'}是否存在于数组中。

它看起来像这样:

render