MongoDB统计含西雅图办公室公司数 相似查询结果差异原因问询
查询结果差异原因
两个查询的逻辑存在本质区别,具体如下:
- 你编写的查询
db.companies.find({ "offices.0.city": "Seattle" }).count()中,offices.0代表匹配offices数组的第一个元素,只有当公司的第一个办公室位于西雅图时才会被计入统计,因此返回结果更少,仅为110。 - 平台给出的正确查询
db.companies.find({ "offices": { "$elemMatch": { "city": "Seattle" } } }).count()中,$elemMatch运算符的作用是匹配数组内至少存在一个符合条件的元素,只要公司任意一间办公室在西雅图就会被统计,完全符合题目要求,因此返回的117是正确结果。
举个简单的示例验证:
某公司的办公地址数据如下:{ "name": "测试公司", "offices": [ {"city": "北京", "address": "xxx"}, {"city": "Seattle", "address": "yyy"} ] }这条数据会被
$elemMatch的查询正常统计,但不会被offices.0.city的查询命中,因为它的第一个办公地址不在西雅图。
内容的提问来源于stack exchange,提问作者VIVID
相关产品推荐
相关产品推荐

