将MongoDB查询发送到其他系统:转换为JSON,然后解码为BSON?用围棋语言怎么做?

将MongoDB查询发送到其他系统:转换为JSON,然后解码为BSON?用围棋语言怎么做?,json,node.js,mongodb,go,bson,Json,Node.js,Mongodb,Go,Bson,我需要将MongoDB查询传输到其他系统。出于这个原因,我想使用。我之所以需要这样做,主要是因为我在查询中使用了日期比较 因此,问题的核心是我需要将node.js后端生成的MongoDB查询传输到另一个用Go语言编写的后端 直观地说,通过REST发送此查询最明显的格式是JSON。但是,MongoDB查询并不完全是JSON,而是BSON,它包含日期的特殊构造 因此,我们的想法是将查询转换为JSON,并使用JSON作为特殊结构的表示形式。经过一些测试,很明显这些查询不起作用。MongoDB shel

我需要将MongoDB查询传输到其他系统。出于这个原因,我想使用。我之所以需要这样做,主要是因为我在查询中使用了日期比较

因此,问题的核心是我需要将node.js后端生成的MongoDB查询传输到另一个用Go语言编写的后端

直观地说,通过REST发送此查询最明显的格式是JSON。但是,MongoDB查询并不完全是JSON,而是BSON,它包含日期的特殊构造

因此,我们的想法是将查询转换为JSON,并使用JSON作为特殊结构的表示形式。经过一些测试,很明显这些查询不起作用。MongoDB shell和通过node.js发送的查询都需要特殊的
ISODate
newdate
构造

最后,实际的问题是:考虑到JavaScript(node.js)和Go语言,是否有从JSON到BSON的编码/解码功能

更新 Node.js编码包 显然,它解析并字符串化了BSON/JSON。 所以,我的问题解决了一半。我想知道围棋语言中是否有类似的东西

示例查询 例如,以下查询在正常BSON中:

{ Tmin: { $gt: ISODate("2006-01-01T23:00:00.000Z") } }
翻译成MongoDB扩展JSON后,它变成:

{ "Tmin": { "$gt" : { "$date" : 1136156400000 }}}

经过一些研究,我找到了这个库,但是它只用于封送,所以我决定编写一个解组器

瞧(我写的),现在它是一个非常简单的
ejson
->
bson
转换器,没有
bson
->
ejson
但是,你可以使用
mejson

安:


经过一些研究,我找到了这个库,但是它只用于封送,所以我决定编写一个解组器

瞧(我写的),现在它是一个非常简单的
ejson
->
bson
转换器,没有
bson
->
ejson
但是,你可以使用
mejson

安:


出于好奇,你能发布一个示例JSON文档吗?当然,我刚刚添加了一个示例BSON查询及其JSON版本出于好奇,你能发布一个示例JSON文档吗?当然,我刚刚添加了一个示例BSON查询及其JSON版本
const j = `{"_id":{"$oid":"53c2ab5e4291b17b666d742a"},"last_seen_at":{"$date":1405266782008},"display_name":{"$undefined":true},
"ref":{"$ref":"col2", "$id":"53c2ab5e4291b17b666d742b"}}`

type TestS struct {
    Id          bson.ObjectId `bson:"_id"`
    LastSeenAt  *time.Time    `bson:"last_seen_at"`
    DisplayName *string       `bson:"display_name,omitempty"`
    Ref         mgo.DBRef     `bson:"ref"`
}

func main() {
    var ts TestS
    if err := ejson.Unmarshal([]byte(j), &ts); err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", ts)

    //or to convert the ejson to bson.M

    var m map[string]interface{}
    if err := json.Unmarshal([]byte(j), &m); err != nil {
        t.Fatal(err)
    }
    err := ejson.Normalize(m)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", m)

}