返回介绍

$match

发布于 2024-10-04 20:57:09 字数 4987 浏览 0 评论 0 收藏 0

用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

示例

现有集合 articles 文档内容如下:

db.articles.insert([ { "_id" : 1, "author" : "dave", "score" : 80, "views" : 100 }, { "_id" : 2, "author" : "dave", "score" : 85, "views" : 521 }, { "_id" : 3, "author" : "ahn", "score" : 60, "views" : 1000 }, { "_id" : 4, "author" : "li", "score" : 55, "views" : 5000 }, { "_id" : 5, "author" : "annT", "score" : 60, "views" : 50 }, { "_id" : 6, "author" : "li", "score" : 94, "views" : 999 }, { "_id" : 7, "author" : "ty", "score" : 95, "views" : 1000 } ])

Match 匹配

利用 $match 执行匹配操作,如下:

db.articles.aggregate([ { $match : { author : "dave" } } ] )

输出:

{ "_id" : 1, "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : 2, "author" : "dave", "score" : 85, "views" : 521 }

范围条件匹配

统计 articles 集合中 score在70~90中间,或者views大于等于1000

回想一下如果用 find() 如何查询?

db.articles.find( { $or: [ { score: { $gt: 70 }, score:{ $lt: 90 } }, { views: { $gte: 1000 } } ] } )

执行输出:

{ "_id" : 1, "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : 2, "author" : "dave", "score" : 85, "views" : 521 }
{ "_id" : 3, "author" : "ahn", "score" : 60, "views" : 1000 }
{ "_id" : 4, "author" : "li", "score" : 55, "views" : 5000 }
{ "_id" : 5, "author" : "annT", "score" : 60, "views" : 50 }
{ "_id" : 7, "author" : "ty", "score" : 95, "views" : 1000 }

可以看到{ "_id" : 5, "author" : "annT", "score" : 60, "views" : 50 }这个结果是不对的,为什么???

同一个score键,后者覆盖前者

db.articles.find( { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } )

聚合match写法

db.articles.aggregate([ { $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } } ])

计算Count值

统计 articles 集合中 score在70~90中间,或者views大于等于1000 个数

db.articles.count( { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } )

那如果使用聚合aggregate 如何来实现呢?

db.articles.aggregate( [ { $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } }, { $group: { _id: null, count: { $sum: 1 } } } ] )

输出:

{ "_id" : null, "count" : 5 }

类似于SQL语句: select count(*) from articles where (score>70 and score<90) or views>=1000

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文