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