2016-09-20 3 views
1

私はGoにコードを書き込みました。私はmgoでmongodbのクエリを持っているので、私は3日間忙しくて、まだそれと戦っています。

mongoシェルを使用したクエリは機能しますが、mgoを使用したmongodbクエリは機能しません。

以下のクエリと結果はmongoシェルで作成されています。

// Query 
db.getCollection("TEST").aggregate([ 
{ 
    "$match": { 
     "date": {"$gte": new Date("2016-06-28"), "$lte": new Date("2016-06-29")}, 
    } 
}, 
{ 
    "$project": { 
     "_id": false, 
     "date": {"$dateToString": {"format": "%Y%m%d", "date":"$date"}}, 
    }, 
}, 
]); 


// Result 
{ 
"date" : "20160628", 
} 
{ 
"date" : "20160629", 
} 

以下のクエリと結果はmgoで作成されます。それは動作しません。

// Query 
matchQuery := bson.M{} 
matchQuery["date"] = bson.M{ 
    "$gte": time.Date(2016, 6, 28, 0, 0, 0, 0, time.UTC), 
    "$lte": time.Date(2016, 6, 29, 23, 59, 59, 0, time.UTC), 
} 
projectQuery := bson.M{ 
    "_id": false, 
    "date": bson.M{ 
     "$dateToString": bson.M{"format": "%Y%m%d", "date": "$date"}, 
    }, 
} 
pipeline := []bson.M{ 
    {"$match": matchQuery}, 
    {"$project": projectQuery}, 
} 


// Result 
{ 
    "date": "0001-01-01T00:00:00Z", 
}, 

{ 
    "date": "0001-01-01T00:00:00Z", 
} 

$ dateToStringを正しく動作させるにはどうすればよいですか?

+0

はたぶん、あなたはそれを無効にフォーマット文字列* "%のY%mの%dの%" *、中prencent *%*を置きます。 * fromDay *と* toDay *値の別の高速チェック。 –

+0

フォーマット文字列とfromDayをDayに変更しましたが、動作しません。 – laeshiny

+0

"date"を渡す場合: "date"ではなく "$ date": "$ dateToString":.... proejctをmongodbに問い合わせると動作します。 – laeshiny

答えて

0

私はそれを解決しました。それは私の間違いでした。誰かが私のようなミスをしないように答えを投稿します。私は変数の型を "time.Time"から "string"に変更しませんでした。

//Old 
type content struct { 
    Date time.Time `bson:"date" json:"date"` 
} 

//New 
type content struct { 
    Date string `bson:"date" json:"date"` 
} 

感謝:)

関連する問題