gpt4 book ai didi

mongodb - 配置 Mongo shell 以默认将所有数字存储为整数

转载 作者:可可西里 更新时间:2023-11-01 10:31:23 26 4
gpt4 key购买 nike

默认情况下,MongoDB shell 将所有数字解释为 float ;当尝试将现有的 JSON 格式数据(在 Mongo 中存储为字符串)转换为实际的 Mongo BSON 对象时,这是一个问题。使用 NumberInt(...)/NumberLong(...) 显式和手动包装数据中的任何整数值也很乏味,因为整数可以出现在任何地方数据。

有没有办法将一个 MongoDB shell session 配置为默认使用 NumberIntNumberLong

或者:有没有一种方法可以将 JSON 字符串解析为 MongoDB shell 中的对象,以便所有没有小数点的数字都已经用 NumberInt/NumberLong?

最佳答案

我现在最终使用的解决方案是对从 JSON.parse 返回的数据调用 markIntegers 函数;它似乎工作正常。为了完整起见,我将其发布在这里;非常欢迎更好的解决方案和更正!

function markIntegers(obj) {
if (obj instanceof Array) {
return obj.map(function(x) { return markIntegers(x); });
// make sure it's a plain object and not Date or BinData etc
} if (obj !== null && typeof obj === "object" && obj.constructor === Object) {
var ret = {}
for (var key in obj)
ret[key] = markIntegers(obj[key]);
return ret;
} else if (typeof obj === "number") {
return obj === Math.floor(obj) ? NumberLong(obj) : obj;
} else {
return obj;
}
}

它是这样工作的:

> markIntegers({a: {b: 3}, c: 4.4, e: ["hello"]})
{ "a" : { "b" : NumberLong(3) }, "c" : 4.4, "e" : [ "hello" ] }

关于mongodb - 配置 Mongo shell 以默认将所有数字存储为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com