【问题标题】:How can I specify BSON type for coordinates when inserting in MongoDb?在 MongoDb 中插入时如何为坐标指定 BSON 类型?
【发布时间】:2017-11-25 22:46:43
【问题描述】:

我有以下document,我想在其上创建2dsphere index,但coordinates field 必须是integer BSON type 才能做到这一点。然而,来自clientdata type 作为坐标的string 出现。

所以我想在插入 MongoDb 之前将其更改为整数,以便之后创建索引。 我该怎么做?

user.saveSubscriber = (jSubscriberData, fCallback) => {
    var jSubscriber = {
        email: jSubscriberData.txtEmail,
        firstName: jSubscriberData.txtName,
        lastName: jSubscriberData.txtLastName,
        address: {
            type: "Point",
            coordinates: [jSubscriberData.lng, jSubscriberData.lat]
        }
    }
    global.db.collection('subscribers').insertOne(jSubscriber, (err, jResult) => {

        if (err) {
            var jError = { "status": "error", "message": "ERROR -> saveSubscriber -> user.js -> 001" }
            return fCallback(false, jError)
        }
        var jOk = { "status": "ok", "message": "user.js ->  subscriber saved -> 000" }
        return fCallback(false, jOk)
    })
}

【问题讨论】:

    标签: mongodb bson


    【解决方案1】:

    使用parseFloat()在存储之前将字符串解析为浮动

    user.saveSubscriber = (jSubscriberData, fCallback) => {
    var jSubscriber = {
        email: jSubscriberData.txtEmail,
        firstName: jSubscriberData.txtName,
        lastName: jSubscriberData.txtLastName,
        address: {
            type: "Point",
            coordinates: [parseFloat(jSubscriberData.lng), parseFloat (jSubscriberData.lat)]
        }
    }
    global.db.collection('subscribers').insertOne(jSubscriber, (err, jResult) => {
    
        if (err) {
            var jError = { "status": "error", "message": "ERROR -> saveSubscriber -> user.js -> 001" }
            return fCallback(false, jError)
        }
        var jOk = { "status": "ok", "message": "user.js ->  subscriber saved -> 000" }
        return fCallback(false, jOk)
    })
    

    }

    【讨论】:

    • 我忘了说我正在使用 NodeJS。那么这仍然相关吗?
    • 是的,它应该可以工作。 parseFlaot() 只是一个 js 方法。
    • 下面的验证方法docs.mongodb.com/manual/core/document-validation通过设置$type="double"怎么样?
    • 如果验证失败,添加验证将限制要插入的文档。您在问题中询问客户端正在发送字符串,并且您想将其存储为浮点数。答案会做到这一点。
    • 嗯,好的。我当时误解了验证。我认为这就是在插入之前为特定字段定义数据类型的方式。是的,它有效。谢谢你。我只是好奇是否有 Mongo 的方法,但显然没有。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2018-09-25
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多