文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
$match
用于过滤数据,只输出符合条件的文档。$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论