我在test
数据库中有这个集合。
[test] 2014-02-11 18:45:48.338 >>> db.blog.posts.find( );
{
"_id" : ObjectId("52ee29bdb8eb94049427886a"),
"comments" : [
{
"author" : "Jane",
"comment" : "yes, yes, it is",
"votes" : 5
}
],
"content" : "This is a post",
"id" : 5
}
{
"_id" : ObjectId("52f95c5bd1fe9c171fe4344b"),
"comments" : [
{
"author" : "Jane",
"comment" : "yes, yes, it is",
"votes" : 5
},
{
"author" : "Nick",
"comment" : "test",
"votes" : 10
},
{
"author" : "John",
"comment" : "new one",
"votes" : 4
}
],
"content" : "This is a post",
"id" : 5
}
当我运行此查找查询时:
[test] 2014-02-11 18:45:50.318 >>> db.blog.posts.find({ "comments" : {author : "Jane", comment: "yes, yes, it is", votes: 5}} );
我收到了两份文件。
但是,如果我运行此查找查询
[test] 2014-02-11 18:46:18.428 >>> db.blog.posts.find({ "comments" : {author : "Jane", comment: "yes, yes, it is", votes: {$gte : 5}}} );
我没有回复文件。
为什么?为什么== 5给我回到结果,但> = 5不会返回任何内容。
答案 0 :(得分:1)
非常有趣的情况,说实话。但是,我认为有 获得所需的更有效的命令。
我已按如下方式解决了您的问题。
db.posts.find({
"comments": {
"$elemMatch": {
author : "Jane",
comment: "yes, yes, it is",
votes: {"$gte" : 5}
}
}
});
,结果如下:
第一个OP查询工作的原因和第二个OP查询不是因为
在第一种情况下,有文件符合被查询的确切形式
第二个OP查询使用修饰符,因此需要使用$ elemMatch包装。
可以在此处找到MongoDB官方网站的更多信息:
http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/
希望这有帮助。