索引数组中的搜索元素

时间:2016-04-11 13:09:02

标签: mongodb

我是MongoDb的新手我有一个具有这种结构的文件:

{
    "_id": "570a38612959856808fe9b1d",
    "author": "foo",
    "books": {
        "570a385737000012009e6f65": {
            "title": "a1",
            "status": "published"
        },
        "570a385737000012009e6f66": {
            "title": "a2",
            "status": "pending"
        },
        "570a385737000012009e6f67": {
            "title": "a1",
            "status": "published"
        }
    }
}

如何搜索所有有待处理图书的作者? 我试过像

这样的东西
{ "books":{$elemMatch:{"status": "pending" }}}

但什么都没有

1 个答案:

答案 0 :(得分:1)

我同意这些评论不是理想的数据结构,但可以使用$where运算符查询所有拥有待处理图书的作者。 $where运算符采用Javascript函数:

db.authors.find({"$where" : function() {
    if (this.books) {
        for (var i in this.books) {
            if (this.books[i].status == 'pending') {
                return true;
            }
        }
    }
    return false;
}});

...或Javascript表达式(本质上是函数的内容作为字符串):

db.authors.find({"$where" : "if (this.books) { for (var i in this.books) { if (this.books[i].status == 'pending') { return true; }}} return false;"});

您仍然可以指定要返回的字段等。

db.authors.find({"$where" : function() {
    ...
}},{author:1});

有关$where运营商的更多信息:

https://docs.mongodb.org/manual/reference/operator/query/where/