mongodb命令行中的查询

Posted

技术标签:

【中文标题】mongodb命令行中的查询【英文标题】:queries in mongodb command line 【发布时间】:2015-04-26 00:10:46 【问题描述】:

我想做一个查询,在大数据中列出人口在 6000 到 8000 之间的特定州的城市。看起来像这样:

 "_id" : "01564", "city" : "STERLING", "loc" : [ -71.775192, 42.435351 ], "pop" : 6481, "state" : "MA" 
 "_id" : "01566", "city" : "STURBRIDGE", "loc" : [ -72.084233, 42.112619 ], "pop" : 7001, "state" : "MA" 
 "_id" : "01568", "city" : "WEST UPTON", "loc" : [ -71.608014, 42.173275 ], "pop" : 4682, "state" : "MA" 
 "_id" : "01569", "city" : "UXBRIDGE", "loc" : [ -71.632869, 42.074426 ], "pop" : 10364, "state" : "MA" 

我想返回马萨诸塞州的城市,比如上面的例子。我怎样才能做到这一点 ? T 试图这样做:

 >db.zipcodes.aggregate( [     $group:  _id: "$city",stateName:"$state", totalPop:  $sum: "$pop"   ,
 $match:  totalPop:  $gte: 1000  , $lte : 2000 ,stateName:"Massachusetts"   ] );

我在下面得到了这个错误:

 aggregate failed
at Error (<anonymous>)
at doassert (src/mongo/shell/assert.js:11:14)
at Function.assert.commandWorked (src/mongo/shell/assert.js:254:5)
at DBCollection.aggregate (src/mongo/shell/collection.js:1278:12)
at (shell):1:13 at src/mongo/shell/assert.js:13

【问题讨论】:

你真的应该自己做作业。您已获得所有必要信息。 【参考方案1】:

您不需要使用聚合框架。

db.zipcodes.find(
   state: 'MA',
   pop: 
     $gte: 6000,
     $lte: 8000
   
, city: 1)

如果您只需要城市名称(唯一),您可以使用distinct

db.zipcodes.distinct('city', 
   state: 'MA',
   pop: 
     $gte: 6000,
     $lte: 8000
   
)

甚至使用foreach

【讨论】:

错误:错误:“$err”:“无法规范化查询:obj 中的 BadValue >1 字段: $gte: 6000.0, $lte: 8000.0 ”,“code”:17287 :( @SalehMakkawy 它应该是其他方式。改变了。 我不想要所有的信息,只需要城市名称我可以这样做。

以上是关于mongodb命令行中的查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb中的“查询”和“命令”有啥区别

Python接口MongoDB实现接口查询数据库功能

mongodb插入数据的时间怎么知道

JS写mongo命令

怎么启动mongodb shell

windows7 怎么启动mongodb