mongodb - 如何(轻松地)从文档数组中查询字段的一系列值

标签 mongodb

Windows 7 64 SP1 MongoDB 2.2.0

鉴于此数据:

db.address_book.drop()
db.address_book.save({"_id":1, "addresses": [ {"zip": 10018} , {"zip": 10012} ] } )
db.address_book.save({"_id":2, "addresses": [ {"zip": 11216} , {"zip": 10012} ] } )
db.address_book.save({"_id":3, "addresses": [ {"zip": 11215} , {"zip": 10010} ] } )
db.address_book.save({"_id":4, "addresses": [ {"zip": 10011} , {"zip": 10041} ] } )
db.address_book.save({"_id":5, "addresses": [ {"zip": 97202} , {"zip": 97201} ] } )
db.address_book.save({"_id":6, "addresses": [ {"zip": 10038} , {"zip": 97201} ] } )

我想要所有邮政编码在 10012-10040 范围内的文档。换句话说,我想要:

{ "_id" : 1, "addresses" : [ { "zip" : 10018 }, { "zip" : 10012 } ] }
{ "_id" : 2, "addresses" : [ { "zip" : 11216 }, { "zip" : 10012 } ] }
{ "_id" : 6, "addresses" : [ { "zip" : 10038 }, { "zip" : 97201 } ] }

此查询返回所需的结果:

db.address_book.find( { "addresses": { $elemMatch: { "$and" :[ { "zip": {$gte: 10012} } ,  {"zip": {$lte: 10040} } ] } } } )

问题:这是获得结果的最短(最优雅)的查询吗?

这些查询中的每一个:

db.address_book.find( { "addresses": { $elemMatch: { "zip": {$gte: 10012} , "zip": {$lte: 10040} } } } )
db.address_book.find( {"addresses.zip" : {$gte:10012, $lte:10040} } )
db.address_book.find( {"$and" :[ { "addresses.zip": {$gte: 10012} } ,  {"addresses.zip": {$lte: 10040} } ] }  )

返回这个:

{ "_id" : 1, "addresses" : [ { "zip" : 10018 }, { "zip" : 10012 } ] }
{ "_id" : 2, "addresses" : [ { "zip" : 11216 }, { "zip" : 10012 } ] }
{ "_id" : 3, "addresses" : [ { "zip" : 11215 }, { "zip" : 10010 } ] }
{ "_id" : 4, "addresses" : [ { "zip" : 10011 }, { "zip" : 10041 } ] }
{ "_id" : 6, "addresses" : [ { "zip" : 10038 }, { "zip" : 97201 } ] }

如果第一个方法最短,它会导致复杂的 C++ 查询:

mongo::Query selector = QUERY("addresses" << BSON("$elemMatch" <<
   BSON("$and" <<BSON_ARRAY(BSON("zip" << BSON("$gte"<<10012)) <<
                            BSON("zip" << BSON("$lte" << 10040))))));

我认为这是一个常见的查询是不是错了?

最佳答案

我认为对于这种情况最简洁、最优雅的查询是您列出的一对的组合:

 db.address_book.find({addresses: {$elemMatch: {zip: {$gte:10012, $lte:10040}}}})

关于mongodb - 如何(轻松地)从文档数组中查询字段的一系列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410042/

相关文章:

javascript - 如何将对象数组插入MongoDb集合

python - 使用 python 在 mongodb 中插入推文搜索结果

c - 使用 C Driver 获取两个日期之间的数据 mongoDb

java - 用于java单元测试的嵌入式OrientDB服务器

mongodb - 在使用 pig 和 mongodb 导入数据时添加 mongo 查询

mongodb - 如何限制 Mongo 查询中字段返回的字符数

python - 为什么 MongoDB 在 Celery 连接上无法识别我的用户?

node.js - Mongoose 和 mapReduce - 未调用映射函数

mongodb - HBase、mongoDB、Cassandra - 小集群、小数据的开销

node.js - 为什么 mongoose 中的 $limit 聚合不返回所有结果?