【问题标题】:Query by time range in mongodb using pymongo使用pymongo在mongodb中按时间范围查询
【发布时间】:2014-10-18 01:42:38
【问题描述】:

需要对数据库 mongodb 执行查询,从而按时间范围生成一组结果。我正在使用 pymongo。我的查询如下:

query = {"$and": [
                     {"id_node": id_node}
                     {"port": port},
                     {"datetime": {"$gte": self.hourBegin}}
                     {"datetime": {"$lte": self.now}}
                     ]}
listResults = db.mycollection.find (query)

我也试过这种方式:

query = {"id_node": int(id_node)
                     "port": port,
                     "datetime": {"$gte": self.hourBegin, "$lte": self.now}}
listResults = db.mycollection.find (query)

但结果总是空的。直接在mongodb中测试,结果为空。我确定数据库中存在我正在研究的时间范围内的数据。

可能的结果列表:

{ "_id" : ObjectId("543618c6e7b9914c35266128"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:04Z"), "valor" : "22.00", "sensor" : "2" }
{ "_id" : ObjectId("543618c6e7b9914c35266129"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:04Z"), "valor" : "0", "sensor" : "1" }
{ "_id" : ObjectId("543618c6e7b9914c3526612c"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:06Z"), "valor" : "22.00", "sensor" : "2" }
{ "_id" : ObjectId("543618c6e7b9914c3526612d"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:06Z"), "valor" : "0", "sensor" : "1" }
{ "_id" : ObjectId("543618c7e7b9914c35266130"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:08Z"), "valor" : "22.00", "sensor" : "2" }
{ "_id" : ObjectId("543618c7e7b9914c35266131"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:08Z"), "valor" : "0", "sensor" : "1" }
{ "_id" : ObjectId("543618c7e7b9914c35266134"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:10Z"), "valor" : "22.00", "sensor" : "2" }
{ "_id" : ObjectId("543618c7e7b9914c35266135"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:10Z"), "valor" : "0", "sensor" : "1" }
{ "_id" : ObjectId("543618c7e7b9914c35266138"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:12Z"), "valor" : "22.00", "sensor" : "2" }
{ "_id" : ObjectId("543618c7e7b9914c35266139"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:12Z"), "valor" : "0", "sensor" : "1" }

【问题讨论】:

  • 删除查询运算符中的空格。使用$gte 而不是$ gte。 $lte 也一样。
  • 也使用查询的第二种变体,但您的查询对象无效。 id_no 字段缺少 :。
  • 您能否更新您的问题以包含您希望包含在结果中的示例文档?
  • 好的,我做了,添加示例文档。
  • self.hourBegin 和self.now 的类型是什么?他们看起来怎么样?

标签: python mongodb pymongo


【解决方案1】:

我访问了http://www.querymongo.com/,然后像在 MySQL 中一样创建了一个查询,然后不得不返回一个 mongodb 查询。像这样:

#MySQL Query
SELECT * FROM inoshare WHERE id_nome = 1 AND port = 1 AND datetime > 'hourBegin' AND datetime <= 'NOW()';

然后返回:

db.inoshare.find({
"id_nome": 1,
"port": 1,
"datetime": {
    "$gt": "hourBegin",
    "$lte": "NOW()"
}
});

然后将变量替换为“hourBegin”和“NOW ()”。 谢谢大家。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多