MongoDB查詢內嵌文件
阿新 • • 發佈:2019-01-31
有文件如下:
/* 0 */ { "_id" : ObjectId("55d09915331c571b60035d95"), "title" : "hello world", "comment" : [{ "author" : "joe", "score" : 3 }, { "author" : "tom", "score" : 5 }, { "author" : "jean", "score" : 9 }] } /* 1 */ { "_id" : ObjectId("55d0996a331c571b60035d96"), "title" : "zhangsan", "comment" : [{ "author" : "joe", "score" : 7 }, { "author" : "suam", "score" : 2 }, { "author" : "jean", "score" : 3 }] } /* 2 */ { "_id" : ObjectId("55d099b1331c571b60035d97"), "title" : "lisi", "comment" : [{ "author" : "wangwu", "score" : 4 }, { "author" : "suam", "score" : 8 }, { "author" : "tom", "score" : 6 }] }
請問如何查詢author為joe,並且score為5以上的評論。
正確答案為
db.test.find({ "comment" : { "$elemMatch" : { "author" : "joe", "score" : { "$gte" : 5 } } } })
如果直接是
db.test.find({ "comment" : { "author" : "joe", "score" : { "$gte" : 5 } } })
來查詢,那麼內嵌文件的匹配必須要整個文件完全匹配。
如果使用
那麼符合auhor條件和符合score條件的評論可能不是同一條,也就是說會查詢出以下兩條文件db.test.find({ "comment.author" : "joe", "comment.score" : { "$gt" : 5 } })
/* 0 */ { "_id" : ObjectId("55d09915331c571b60035d95"), "title" : "hello world", "comment" : [{ "author" : "joe", "score" : 3 }, { "author" : "tom", "score" : 5 }, { "author" : "jean", "score" : 9 }] } /* 1 */ { "_id" : ObjectId("55d0996a331c571b60035d96"), "title" : "zhangsan", "comment" : [{ "author" : "joe", "score" : 7 }, { "author" : "suam", "score" : 2 }, { "author" : "jean", "score" : 3 }] }