標籤:mongodb 查詢內嵌文檔
有文檔如下:
/* 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 } } })來查詢,那麼內嵌文檔的匹配必須要整個文檔完全符合。
如果使用
db.test.find({ "comment.author" : "joe", "comment.score" : { "$gt" : 5 } })那麼符合auhor條件和符合score條件的評論可能不是同一條,也就是說會查詢出以下兩條文檔
/* 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 }]}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
MongoDB查詢內嵌文檔