gpt4 book ai didi

MongoDB 数字字段不会插入或更新我输入的数字

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

这是我的问题:

db.Group6391102Bounds.insert({ bound:"latest",id:138548488276343678,complete:false}) db.Group6391102Bounds.find()

   { "_id" : ObjectId("5297d9e5ef9f659b82271617"), "bound" : "earliest", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc28b2d702ea878b540d"), "bound" : "latest", "id" : 138548488276343680, "complete" : false }

db.Group6391102Bounds.insert({ bound:"middle",id:138548488276343678,complete:false}) db.Group6391102Bounds.find()

   { "_id" : ObjectId("5297d9e5ef9f659b82271617"), "bound" : "earliest", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc28b2d702ea878b540d"), "bound" : "latest", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc3cb2d702ea878b540e"), "bound" : "middle", "id" : 138548488276343680, "complete" : false }

db.Group6391102Bounds.insert({ bound:"middle",name:138548488276343678,complete:false}) db.Group6391102Bounds.find()

   { "_id" : ObjectId("5297d9e5ef9f659b82271617"), "bound" : "earliest", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc28b2d702ea878b540d"), "bound" : "latest", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc3cb2d702ea878b540e"), "bound" : "middle", "id" : 138548488276343680, "complete" : false }
{ "_id" : ObjectId("5297dc91b2d702ea878b540f"), "bound" : "middle", "name" : 138548488276343680, "complete" : false }

如您所见,即使我插入了一个特定的 ID,mongoDB 也会添加一个不同的 ID。我不知道为什么会这样。任何帮助将不胜感激。感恩节快乐!

最佳答案

抱歉,我一开始没有理解您的问题,因此提供了错误的答案(感谢 cababunga 指出这一点)。所以这是一个正确的。

Mongoshell 支持不同的 data types .当您输入时,它会尝试猜测您的数据类型。所以你输入了你的大数字:138548488276343678。请注意,它大于 2^31-1,这是 32 位整数的最大值。所以它把它当作一个 float ,因为 float 没有精确存储,所以它稍微修改了一下。这就是为什么你存储的数字几乎相同,但有一点不同(这个差异将小于 8)。但是您想精确存储这个数字并且 mongo 支持 64 位整数(适合您的整数)。

所以需要指定存储为64bit integer .您可以通过以下方式执行此操作:

db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})

在此之后您可以检索您的文档 db.a.find() 并且它将是正确的。请注意,许多驱动程序都有类似的问题,因此您必须明确告知您要将它们保存为 64 位整数。

And here is my wrong attempt. If you thing that it should not be here, please modify my question:

如果您没有为正在创建的文档指定 _id,mongodb 会自行创建 _id 字段。您可以阅读更多关于 _id here 的信息在official documentation .

如果您有自己的字段,您希望将其用作_id,而不是编写id:138548488276343678,您应该编写_id : 138548488276343678

附言还因为我看到您使用的是相当大的数字,请记住 mongodb 中的整数存储为 64-bit integers (这意味着它在 -2^63 到 2^63 - 1 之间)

关于MongoDB 数字字段不会插入或更新我输入的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276622/

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