如何使用mgo和Go查询具有日期范围的MongoDB? [英] How can I query MongoDB with date range using mgo and Go?

查看:2213
本文介绍了如何使用mgo和Go查询具有日期范围的MongoDB?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我有一个名为my_sales的集合,其中包含字段product_name,price,sale_date。

我的文档看起来像

  {
_id:ObjectId(5458b6ee09d76eb7326df3a4),
product_name:product1,
price:200,
sale_date:ISODate(2014-11-04T11:22:19.589Z)
}
{
_id:ObjectId(5458b6ee09d76eb7326df3a4),
product_name:product1,
price:200,
sale_date:ISODate(2014-11-04T11:22:19.589Z)
}
{
_id:ObjectId(5458b6ee09d76eb7326df3a4),
product_name:product1,
price:200,
sale_date:ISODate(2014-11-

{
_id:ObjectId(5458b6ee09d76eb7326df3a4),
product_name:product1,
price :200,
sale_date:ISODate(2014-11-05T11:22:19.589Z)
}

我在mongo shell中尝试过这样的操作

  db.my_ sales.find({sale_date:{$ gt:ISODate(2014-11-04),$ lt:new ISODate(2014-11-05)}); 

它给出了正确的结果。现在我需要使用golang查询同样的东西
我试过这样

  var sales_his []销售
err:= c.Find(bson.M {sale_date:bson.M {$ gt:ISODate(+ date_from +),$ lt:ISODate(+ date_to +)}} ).All(& sales_his)

给出空结果请帮助

解决方案

mgo支持 time.Time 所以如果你的结构如下所示:

 类型销售结构{
ProductName字符串`bson:product_name`
Price int`bson:price`
SaleDate time.Time`bson:sale_date`
}

然后您可以像这样查询它:

  fromDate:= time.Date(2014,time.November,4,0,0,0,time.UTC)
toDate:= time .Date(2014,time.November,5,0,0,0,0,time.UTC)

var sales_his [] Sale
err = c.Find(
bson.M {
sale_date:bson.M {
$ gt:fromDate,
$ lt:toDate ,
},
})。All(& sales_his)


Hi I have a collection named "my_sales" having fields product_name, price, sale_date.

My doc looks like

{
    "_id" : ObjectId("5458b6ee09d76eb7326df3a4"),
    "product_name" : product1,
    "price" : 200,
    "sale_date" : ISODate("2014-11-04T11:22:19.589Z")
}
{
    "_id" : ObjectId("5458b6ee09d76eb7326df3a4"),
    "product_name" : product1,
    "price" : 200,
    "sale_date" : ISODate("2014-11-04T11:22:19.589Z")
}
{
    "_id" : ObjectId("5458b6ee09d76eb7326df3a4"),
    "product_name" : product1,
    "price" : 200,
    "sale_date" : ISODate("2014-11-04T11:22:19.589Z")
}
{
    "_id" : ObjectId("5458b6ee09d76eb7326df3a4"),
    "product_name" : product1,
    "price" : 200,
    "sale_date" : ISODate("2014-11-05T11:22:19.589Z")
}

I tried in mongo shell like this

 db.my_sales.find({ sale_date: { $gt: ISODate("2014-11-04"), $lt: new ISODate("2014-11-05") });

It giving the correct result. Now I need to query same thing using golang I tried like this

 var sales_his []Sale
 err := c.Find(bson.M{"sale_date":bson.M{ "$gt": "ISODate("+date_from+")", "$lt": "ISODate("+date_to+")" }    }).All(&sales_his)

Its giving null result please help

解决方案

mgo supports time.Time for BSON dates.

So if your struct looks like this:

type Sale struct {
    ProductName string    `bson:"product_name"`
    Price       int       `bson:"price"`
    SaleDate    time.Time `bson:"sale_date"`
}

Then you can query it like this:

fromDate := time.Date(2014, time.November, 4, 0, 0, 0, 0, time.UTC)
toDate := time.Date(2014, time.November, 5, 0, 0, 0, 0, time.UTC)

var sales_his []Sale
err = c.Find(
    bson.M{
        "sale_date": bson.M{
            "$gt": fromDate,
            "$lt": toDate,
        },
    }).All(&sales_his)

这篇关于如何使用mgo和Go查询具有日期范围的MongoDB?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆