我是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" }}}
但什么都没有
答案 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/